no-magic-numbers
Disallow magic numbers.
This rule extends the base eslint/no-magic-numbers rule.
It adds support for:
- numeric literal types (
type T = 1), enummembers (enum Foo { bar = 1 }),readonlyclass properties (class Foo { readonly bar = 1 }).
How to Use
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"
}
};
Try this rule in the playground ↗
Options
See eslint/no-magic-numbers options.
This rule adds the following options:
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
A boolean to specify if enums used in TypeScript are considered okay. false by default.
Examples of incorrect code for the { "ignoreEnums": false } option:
enum foo {
SECOND = 1000,
}
Open in PlaygroundExamples of correct code for the { "ignoreEnums": true } option:
enum foo {
SECOND = 1000,
}
Open in PlaygroundignoreNumericLiteralTypes
A boolean to specify if numbers used in TypeScript numeric literal types are considered okay. false by default.
Examples of incorrect code for the { "ignoreNumericLiteralTypes": false } option:
type SmallPrimes = 2 | 3 | 5 | 7 | 11;
Open in PlaygroundExamples of correct code for the { "ignoreNumericLiteralTypes": true } option:
type SmallPrimes = 2 | 3 | 5 | 7 | 11;
Open in PlaygroundignoreReadonlyClassProperties
Examples of incorrect code for the { "ignoreReadonlyClassProperties": false } option:
class Foo {
readonly A = 1;
readonly B = 2;
public static readonly C = 1;
static readonly D = 1;
}
Open in PlaygroundExamples of correct code for the { "ignoreReadonlyClassProperties": true } option:
class Foo {
readonly A = 1;
readonly B = 2;
public static readonly C = 1;
static readonly D = 1;
}
Open in PlaygroundignoreTypeIndexes
A boolean to specify if numbers used to index types are okay. false by default.
Examples of incorrect code for the { "ignoreTypeIndexes": false } option:
type Foo = Bar[0];
type Baz = Parameters<Foo>[2];
Open in PlaygroundExamples of correct code for the { "ignoreTypeIndexes": true } option:
type Foo = Bar[0];
type Baz = Parameters<Foo>[2];
Open in PlaygroundWhen Not To Use It
If your project frequently deals with constant numbers and you don't wish to take up extra space to declare them, this rule might not be for you. We recommend at least using descriptive comments and/or names to describe constants. You might consider using ESLint disable comments instead of completely disabling this rule.