Skip to content
← Back to rules

typescript/no-unsafe-enum-comparison 의심스러움

💭 This rule requires type information.
An auto-fix is available for this rule.

작동 방식

이 규칙은 열거형 값과 비-열거형 값 간의 비교를 금지합니다.

왜 좋지 않은가?

열거형 값은 타입 안정성 관점에서 다른 동일한 열거형 유형의 값이나 해당 열거형의 기초 리터럴 값과만 비교되어야 합니다. 관련이 없는 값과 열거형을 비교하면 예기치 못한 동작을 유발할 수 있으며, 타입 안정성을 위해 열거형을 사용하는 목적을 무시하게 됩니다.

예시

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

ts
enum Status {
  Open = "open",
  Closed = "closed",
}

enum Color {
  Red = "red",
  Blue = "blue",
}

declare const status: Status;
declare const color: Color;
declare const str: string;

// 다른 열거형과 열거형 비교
if (status === color) {
} // 안전하지 않음

// 문자열과 열거형 비교 (리터럴 값과 일치하는 경우를 제외하고)
if (status === str) {
} // 안전하지 않음

// 임의의 값과 비교
if (status === "unknown") {
} // 안전하지 않음

이 규칙에 올바른 코드 예시:

ts
enum Status {
  Open = "open",
  Closed = "closed",
}

declare const status: Status;

// 동일한 열거형 값과 비교
if (status === Status.Open) {
} // 안전함

// 올바른 리터럴 타입과 비교
if (status === "open") {
} // 안전함

// 열거형 메서드 사용
if (Object.values(Status).includes(someValue)) {
} // 확인하는 안전한 방법

사용 방법

구성 파일 또는 명령줄 인터페이스에서 이 규칙을 활성화하려면 다음을 사용하세요:

json
{
  "rules": {
    "typescript/no-unsafe-enum-comparison": "error"
  }
}
bash
oxlint --type-aware --deny typescript/no-unsafe-enum-comparison

참고 자료