eslint/no-magic-numbers 스타일
작동 방식
이 규칙은 특수 숫자를 상수로 선언함으로써 의미를 명확하게 하여 코드의 가독성을 높이고 리팩터링을 쉽게 만들도록 합니다. 현재 구현에서는 배열 인덱스 내부의 BigInt 숫자를 지원하지 않습니다.
왜 좋지 않은가?
‘마법의 숫자’는 코드 내에서 반복적으로 나타나지만 명시적인 의미 없이 사용되는 숫자입니다. 이러한 숫자는 가능한 한 이름이 지정된 상수로 대체되어야 합니다.
예제
이 규칙에 대한 잘못된 코드 예시:
var dutyFreePrice = 100;
var finalPrice = dutyFreePrice + dutyFreePrice * 0.25;옵션 "ignore"를 사용한 올바른 코드 예시:
/*typescript no-magic-numbers: ["error", { "ignore": [1] }]*/
var data = ["foo", "bar", "baz"];
var dataLast = data.length && data[data.length - 1];옵션 "ignoreArrayIndexes"를 사용한 올바른 코드 예시:
/*typescript no-magic-numbers: ["error", { "ignoreArrayIndexes": true }]*/
var item = data[2];
data[100] = a;
f(data[0]);
a = data[-0]; // 0과 동일, -0는 자동으로 "0"으로 형변환됨
a = data[0xab];
a = data[5.6e1];
a = data[4294967294]; // 최대 배열 인덱스옵션 "ignoreDefaultValues"를 사용한 올바른 코드 예시:
/*typescript no-magic-numbers: ["error", { "ignoreDefaultValues": true }]*/
const { tax = 0.25 } = accountancy;
function mapParallel(concurrency = 3) {
/***/
}옵션 "ignoreClassFieldInitialValues"를 사용한 올바른 코드 예시:
/*typescript no-magic-numbers: ["error", { "ignoreClassFieldInitialValues": true }]*/
class C {
foo = 2;
bar = -3;
#baz = 4;
static qux = 5;
}옵션 "enforceConst"를 사용한 잘못된 코드 예시:
/*typescript no-magic-numbers: ["error", { "enforceConst": true }]*/
var TAX = 0.25;옵션 "detectObjects"를 사용한 잘못된 코드 예시:
/*typescript no-magic-numbers: ["error", { "detectObjects": true }]*/
var magic = {
tax: 0.25,
};옵션 "detectObjects"를 사용한 올바른 코드 예시:
/*typescript no-magic-numbers: ["error", { "detectObjects": true }]*/
var TAX = 0.25;
var magic = {
tax: TAX,
};옵션 "ignoreEnums"를 사용한 올바른 코드 예시:
/*typescript no-magic-numbers: ["error", { "ignoreEnums": true }]*/
enum foo {
SECOND = 1000,
}옵션 "ignoreNumericLiteralTypes"를 사용한 올바른 코드 예시:
/*typescript no-magic-numbers: ["error", { "ignoreNumericLiteralTypes": true }]*/
type SmallPrimes = 2 | 3 | 5 | 7 | 11;옵션 "ignoreReadonlyClassProperties"를 사용한 올바른 코드 예시:
/*typescript no-magic-numbers: ["error", { "ignoreReadonlyClassProperties": true }]*/
class Foo {
readonly A = 1;
readonly B = 2;
public static readonly C = 1;
static readonly D = 1;
}옵션 "ignoreTypeIndexes"를 사용한 올바른 코드 예시:
/*typescript no-magic-numbers: ["error", { "ignoreTypeIndexes": true }]*/
type Foo = Bar[0];
type Baz = Parameters<Foo>[2];구성
이 규칙은 다음 속성을 가지는 구성 객체를 수락합니다:
detectObjects
type: boolean
기본값: false
true로 설정하면 객체 속성에 사용된 숫자 리터럴도 마법의 숫자로 간주합니다.
enforceConst
type: boolean
기본값: false
true로 설정하면 숫자 상수는 let 또는 var 대신 const로 선언되어야 함을 강제합니다.
ignore
type: array
기본값: []
마법의 숫자로 사용될 때 무시할 숫자 목록입니다. 소수 또는 BigInt 문자열 포함 가능.
ignore[n]
ignoreArrayIndexes
type: boolean
기본값: false
true로 설정하면 배열 인덱스로 사용된 숫자 리터럴은 무시됩니다.
ignoreClassFieldInitialValues
type: boolean
기본값: false
true로 설정하면 클래스 필드의 초기값으로 사용된 숫자 리터럴은 무시됩니다.
ignoreDefaultValues
type: boolean
기본값: false
true로 설정하면 함수 매개변수 및 비구조화 할당에서 사용된 기본값으로 사용된 숫자 리터럴은 무시됩니다.
ignoreEnums
type: boolean
기본값: false
true로 설정하면 타입스크립트 열거형 내의 숫자 리터럴은 무시됩니다.
ignoreNumericLiteralTypes
type: boolean
기본값: false
true로 설정하면 타입스크립트 숫자 리터럴 타입으로 사용된 숫자 리터럴은 무시됩니다.
ignoreReadonlyClassProperties
type: boolean
기본값: false
true로 설정하면 읽기 전용 클래스 속성 내의 숫자 리터럴은 무시됩니다.
ignoreTypeIndexes
type: boolean
기본값: false
true로 설정하면 타입스크립트 타입을 인덱싱하는 데 사용된 숫자 리터럴은 무시됩니다.
사용 방법
이 규칙을 구성 파일 또는 명령줄에서 활성화하려면 다음을 사용할 수 있습니다:
{
"rules": {
"no-magic-numbers": "error"
}
}oxlint --deny no-magic-numbers