Skip to content
← Back to rules

eslint/no-magic-numbers 스타일

An auto-fix is available for this rule.

작동 방식

이 규칙은 특수 숫자를 상수로 선언함으로써 의미를 명확하게 하여 코드의 가독성을 높이고 리팩터링을 쉽게 만들도록 합니다. 현재 구현에서는 배열 인덱스 내부의 BigInt 숫자를 지원하지 않습니다.

왜 좋지 않은가?

‘마법의 숫자’는 코드 내에서 반복적으로 나타나지만 명시적인 의미 없이 사용되는 숫자입니다. 이러한 숫자는 가능한 한 이름이 지정된 상수로 대체되어야 합니다.

예제

이 규칙에 대한 잘못된 코드 예시:

javascript
var dutyFreePrice = 100;
var finalPrice = dutyFreePrice + dutyFreePrice * 0.25;

옵션 "ignore"를 사용한 올바른 코드 예시:

javascript
/*typescript no-magic-numbers: ["error", { "ignore": [1] }]*/
var data = ["foo", "bar", "baz"];
var dataLast = data.length && data[data.length - 1];

옵션 "ignoreArrayIndexes"를 사용한 올바른 코드 예시:

javascript
/*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"를 사용한 올바른 코드 예시:

javascript
/*typescript no-magic-numbers: ["error", { "ignoreDefaultValues": true }]*/
const { tax = 0.25 } = accountancy;
function mapParallel(concurrency = 3) {
  /***/
}

옵션 "ignoreClassFieldInitialValues"를 사용한 올바른 코드 예시:

javascript
/*typescript no-magic-numbers: ["error", { "ignoreClassFieldInitialValues": true }]*/
class C {
  foo = 2;
  bar = -3;
  #baz = 4;
  static qux = 5;
}

옵션 "enforceConst"를 사용한 잘못된 코드 예시:

javascript
/*typescript no-magic-numbers: ["error", { "enforceConst": true }]*/
var TAX = 0.25;

옵션 "detectObjects"를 사용한 잘못된 코드 예시:

javascript
/*typescript no-magic-numbers: ["error", { "detectObjects": true }]*/
var magic = {
  tax: 0.25,
};

옵션 "detectObjects"를 사용한 올바른 코드 예시:

javascript
/*typescript no-magic-numbers: ["error", { "detectObjects": true }]*/
var TAX = 0.25;

var magic = {
  tax: TAX,
};

옵션 "ignoreEnums"를 사용한 올바른 코드 예시:

typescript
/*typescript no-magic-numbers: ["error", { "ignoreEnums": true }]*/
enum foo {
  SECOND = 1000,
}

옵션 "ignoreNumericLiteralTypes"를 사용한 올바른 코드 예시:

typescript
/*typescript no-magic-numbers: ["error", { "ignoreNumericLiteralTypes": true }]*/
type SmallPrimes = 2 | 3 | 5 | 7 | 11;

옵션 "ignoreReadonlyClassProperties"를 사용한 올바른 코드 예시:

typescript
/*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
/*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로 설정하면 타입스크립트 타입을 인덱싱하는 데 사용된 숫자 리터럴은 무시됩니다.

사용 방법

이 규칙을 구성 파일 또는 명령줄에서 활성화하려면 다음을 사용할 수 있습니다:

json
{
  "rules": {
    "no-magic-numbers": "error"
  }
}
bash
oxlint --deny no-magic-numbers

참고 자료