no-magic-numbers
Disallow magic numbers.
Attributes
- Included in configs
- ✅ Recommended
- 🔒 Strict
- Fixable
- 🔧 Automated Fixer
- 🛠 Suggestion Fixer
- 💭 Requires type information
Rule Details
This rule extends the base eslint/no-magic-numbers
rule.
It adds support for:
- numeric literal types (
type T = 1
), enum
members (enum Foo { bar = 1 }
),readonly
class properties (class Foo { readonly bar = 1 }
).
How to Use
{
// note you must disable the base rule as it can report incorrect errors
"no-magic-numbers": "off",
"@typescript-eslint/no-magic-numbers": [
"error",
{
/* options */
}
]
}
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:
/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreEnums": false }]*/
enum foo {
SECOND = 1000,
}
Examples of correct code for the { "ignoreEnums": true }
option:
/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreEnums": true }]*/
enum foo {
SECOND = 1000,
}
ignoreNumericLiteralTypes
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:
/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreNumericLiteralTypes": false }]*/
type SmallPrimes = 2 | 3 | 5 | 7 | 11;
Examples of correct code for the { "ignoreNumericLiteralTypes": true }
option:
/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreNumericLiteralTypes": true }]*/
type SmallPrimes = 2 | 3 | 5 | 7 | 11;
ignoreReadonlyClassProperties
Examples of incorrect code for the { "ignoreReadonlyClassProperties": false }
option:
/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreReadonlyClassProperties": false }]*/
class Foo {
readonly A = 1;
readonly B = 2;
public static readonly C = 1;
static readonly D = 1;
}
Examples of correct code for the { "ignoreReadonlyClassProperties": true }
option:
/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreReadonlyClassProperties": true }]*/
class Foo {
readonly A = 1;
readonly B = 2;
public static readonly C = 1;
static readonly D = 1;
}
ignoreTypeIndexes
A boolean to specify if numbers used to index types are okay. false
by default.
Examples of incorrect code for the { "ignoreTypeIndexes": false }
option:
/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreTypeIndexes": false }]*/
type Foo = Bar[0];
type Baz = Parameters<Foo>[2];
Examples of correct code for the { "ignoreTypeIndexes": true }
option:
/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreTypeIndexes": true }]*/
type Foo = Bar[0];
type Baz = Parameters<Foo>[2];
Taken with ❤️ from ESLint core