禁止使用未定义的变量
禁止在定义之前使用变量。
此规则扩展了基础 eslint/no-use-before-define
规则。它添加了对 type
、interface
和 enum
声明的支持。
如何使用
.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"
}
};
在游乐场中尝试此规则 ↗
选项
参见 eslint/no-use-before-define
选项.
此规则添加了以下选项
interface Options extends BaseNoUseBeforeDefineOptions {
enums?: boolean;
typedefs?: boolean;
ignoreTypeReferences?: boolean;
}
const defaultOptions: Options = {
...baseNoUseBeforeDefineDefaultOptions,
enums: true,
typedefs: true,
ignoreTypeReferences: true,
};
enums
如果此选项为 true
,则此规则会在枚举声明之前警告对枚举的任何引用。如果此选项为 false
,则此规则将忽略对枚举的引用,前提是引用位于子作用域中。
{ "enums": true }
选项的代码示例
- ❌ 错误
- ✅ 正确
const x = Foo.FOO;
enum Foo {
FOO,
}
在 Playground 中打开function foo() {
return Foo.FOO;
}
enum Foo {
FOO,
}
在 Playground 中打开typedefs
如果此选项为 true
,则此规则会在类型声明之前警告对类型的任何引用。如果此选项为 false
,则此规则将忽略对类型的引用。
{ "typedefs": false }
选项的正确代码示例
let myVar: StringOrNumber;
type StringOrNumber = string | number;
在 Playground 中打开ignoreTypeReferences
如果此选项为 true
,则此规则将忽略所有类型引用,例如类型注释和断言中的引用。如果此选项为 false
,则此规则将检查所有类型引用。
{ "ignoreTypeReferences": true }
选项的正确代码示例
let var1: StringOrNumber;
type StringOrNumber = string | number;
let var2: Enum;
enum Enum {}
在 Playground 中打开