Skip to content

Latest commit

 

History

History
106 lines (73 loc) · 2.67 KB

no-use-before-define.md

File metadata and controls

106 lines (73 loc) · 2.67 KB

Disallow the use of variables before they are defined (no-use-before-define)

PLEASE READ THIS ISSUE BEFORE USING THIS RULE #1856

Rule Details

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

How to use

{
  // 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"]
}

Options

See eslint/no-use-before-define 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

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 incorrect code for the { "enums": false } option:

/*eslint no-use-before-define: ["error", { "enums": false }]*/

const x = Foo.FOO;

enum Foo {
  FOO,
}

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

/*eslint no-use-before-define: ["error", { "enums": false }]*/

function foo() {
  return Foo.FOO;
}

enum Foo {
  FOO,
}

typedefs

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:

/*eslint no-use-before-define: ["error", { "typedefs": false }]*/

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

ignoreTypeReferences

If this is true, this rule ignores all type references, such as in type annotations and assertions. If this is false, this will will check all type references.

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

/*eslint no-use-before-define: ["error", { "ignoreTypeReferences": true }]*/

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

let var2: Enum;
enum Enum {}

Other Options

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

Taken with ❤️ from ESLint core