Skip to main content

no-use-before-define

Disallow the use of variables before they are defined.

This rule extends the base eslint/no-use-before-define rule. It adds support for type, interface and enum declarations.

How to Use

.eslintrc.cjs
module.exports = {
"rules": {
// Note: you must disable the base rule as it can report incorrect errors
"no-use-before-define": "off",
"@typescript-eslint/no-use-before-define": "error"
}
};

Try this rule in the playground ↗

Options

See eslint/no-use-before-define's options.

This rule adds the following options:

interface Options extends BaseNoUseBeforeDefineOptions {
enums?: boolean;
typedefs?: boolean;
ignoreTypeReferences?: boolean;
}

const defaultOptions: Options = {
...baseNoUseBeforeDefineDefaultOptions,
enums: true,
typedefs: true,
ignoreTypeReferences: true,
};

enums

Whether to check references to enums before the enum declaration.

If this is true, this rule warns every reference to a enum before the enum declaration. If this is false, this rule will ignore references to enums, when the reference is in a child scope.

Examples of code for the { "enums": true } option:

const x = Foo.FOO;

enum Foo {
FOO,
}
Open in Playground

typedefs

Whether to check references to types before the type declaration.

If this is true, this rule warns every reference to a type before the type declaration. If this is false, this rule will ignore references to types.

Examples of correct code for the { "typedefs": false } option:

let myVar: StringOrNumber;
type StringOrNumber = string | number;
Open in Playground

ignoreTypeReferences

Whether to ignore type references, such as in type annotations and assertions.

If this is true, this rule ignores all type references. If this is false, this will check all type references.

Examples of correct code for the { "ignoreTypeReferences": true } option:

let var1: StringOrNumber;
type StringOrNumber = string | number;

let var2: Enum;
enum Enum {}
Open in Playground

Resources

Taken with ❤️ from ESLint core.