Skip to content
← Back to rules

typescript/no-unnecessary-type-assertion 의심스러움

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

작동 방식

이 규칙은 표현식의 타입을 변경하지 않는 타입 명시를 금지합니다.

왜 문제가 될까요?

표현식의 타입을 실제로 변경하지 않는 타입 명시는 불필요하며 안전하게 제거할 수 있습니다. 이러한 명시는 추가적인 시각적 혼란만 만들 뿐 어떠한 이점도 제공하지 않으며, 타입스크립트의 타입 시스템에 대한 오해를 시사할 수 있습니다.

예시

이 규칙에 부적절한 코드 예시:

ts
const str: string = "hello";
const redundant = str as string; // 불필요함, 이미 문자열임

function getString(): string {
  return "hello";
}
const result = getString() as string; // 불필요함, 이미 문자열 반환

const num = 42;
const alsoRedundant = num as 42; // 타입스크립트가 리터럴 타입을 추론할 수 있다면 불필요함

// 더 넓은 타입으로의 불필요한 명시
const literal = "hello" as string;

이 규칙에 적절한 코드 예시:

ts
const unknown: unknown = "hello";
const str = unknown as string; // 타입을 좁히기 위해 필요함

const element = document.getElementById("myElement") as HTMLInputElement; // 특정 요소 타입을 위해 필요함

const obj = { name: "John" };
const name = obj.name as const; // 리터럴 타입을 위해 필요함

// 명시가 필요 없음
const str2: string = "hello";
const num: number = 42;

구성

이 규칙은 다음 속성을 가진 구성 객체를 수용합니다.

checkLiteralConstAssertions

type: boolean

기본값: false

'foo' as const와 같은 리터럴 const 명시를 확인할지 여부. false(기본값)인 경우, 리터럴 타입의 const 명시는 경고되지 않습니다. true인 경우, 타입이 이미 리터럴이므로 이들 명시는 불필요하다고 보고됩니다.

typesToIgnore

type: string[]

기본값: []

불필요한 명시를 확인할 때 무시할 타입 이름 목록입니다. 이 타입으로의 타입 명시는 불필요해 보여도 경고되지 않습니다. 예: ["Foo", "Bar"]로 설정하면 x as Foo 또는 x as Bar를 허용합니다.

사용 방법

이 규칙을 활성화하려면 구성 파일이나 CLI를 사용하여 다음과 같이 수행할 수 있습니다:

json
{
  "rules": {
    "typescript/no-unnecessary-type-assertion": "error"
  }
}
bash
oxlint --type-aware --deny typescript/no-unnecessary-type-assertion

참고 자료