跳至主要内容

禁止使用魔术数字

禁止使用魔数。

此规则扩展了基本 eslint/no-magic-numbers 规则。它添加了对以下内容的支持:

  • 数字字面量类型 (type T = 1),
  • enum 成员 (enum Foo { bar = 1 }),
  • readonly 类属性 (class Foo { readonly bar = 1 })。

使用方法

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

在游乐场中尝试此规则 ↗

选项

参见 eslint/no-magic-numbers 选项

此规则添加了以下选项

interface Options extends BaseNoMagicNumbersOptions {
ignoreEnums?: boolean;
ignoreNumericLiteralTypes?: boolean;
ignoreReadonlyClassProperties?: boolean;
ignoreTypeIndexes?: boolean;
}

const defaultOptions: Options = {
...baseNoMagicNumbersDefaultOptions,
ignoreEnums: false,
ignoreNumericLiteralTypes: false,
ignoreReadonlyClassProperties: false,
ignoreTypeIndexes: false,
};

ignoreEnums

一个布尔值,用于指定在 TypeScript 中使用的枚举是否被认为是正常的。默认值为 false

{ "ignoreEnums": false } 选项的不正确代码示例

enum foo {
SECOND = 1000,
}
在游乐场中打开

{ "ignoreEnums": true } 选项的正确代码示例

enum foo {
SECOND = 1000,
}
在游乐场中打开

ignoreNumericLiteralTypes

一个布尔值,用于指定在 TypeScript 数字字面量类型中使用的数字是否被认为是正常的。默认值为 false

{ "ignoreNumericLiteralTypes": false } 选项的不正确代码示例

type SmallPrimes = 2 | 3 | 5 | 7 | 11;
在游乐场中打开

{ "ignoreNumericLiteralTypes": true } 选项的正确代码示例

type SmallPrimes = 2 | 3 | 5 | 7 | 11;
在游乐场中打开

ignoreReadonlyClassProperties

{ "ignoreReadonlyClassProperties": false } 选项的不正确代码示例

class Foo {
readonly A = 1;
readonly B = 2;
public static readonly C = 1;
static readonly D = 1;
}
在游乐场中打开

{ "ignoreReadonlyClassProperties": true } 选项的正确代码示例

class Foo {
readonly A = 1;
readonly B = 2;
public static readonly C = 1;
static readonly D = 1;
}
在游乐场中打开

ignoreTypeIndexes

一个布尔值,用于指定是否允许使用数字索引类型。默认值为 false

{ "ignoreTypeIndexes": false } 选项的错误代码示例

type Foo = Bar[0];
type Baz = Parameters<Foo>[2];
在游乐场中打开

{ "ignoreTypeIndexes": true } 选项的正确代码示例

type Foo = Bar[0];
type Baz = Parameters<Foo>[2];
在游乐场中打开

何时不使用它

如果您的项目经常处理常量数字,并且您不想占用额外的空间来声明它们,那么此规则可能不适合您。我们建议至少使用描述性注释和/或名称来描述常量。您可以考虑使用 ESLint 禁用注释 而不是完全禁用此规则。

资源

来自 ESLint 核心 的 ❤️。