Skip to content
← Back to rules

typescript/no-unsafe-member-access Pedantic

💭 This rule requires type information.

작동 방식

이 규칙은 any 타입을 가진 값에 대한 멤버 접근을 금지합니다.

왜 좋지 않은가?

타입스크립트의 any 타입은 타입 체크를 비활성화합니다. any 타입으로 지정된 값의 멤버(속성 또는 메서드)에 접근할 경우, 타입스크립트는 해당 멤버가 존재하는지 여부 또는 그 타입이 무엇인지 확인할 수 없습니다. 이로 인해 런타임 오류가 발생할 수 있습니다.

예시

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

ts
declare const anyValue: any;

anyValue.foo; // 안전하지 않은 멤버 접근

anyValue.bar.baz; // 안전하지 않은 중첩 멤버 접근

anyValue["key"]; // 안전하지 않은 계산된 멤버 접근

const result = anyValue.method(); // 안전하지 않은 메서드 접근

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

ts
declare const obj: { foo: string; bar: { baz: number } };
declare const unknownValue: unknown;

obj.foo; // 안전함

obj.bar.baz; // 안전함

obj["foo"]; // 안전함

// unknown에 대한 타입 가드
if (typeof unknownValue === "object" && unknownValue !== null && "foo" in unknownValue) {
  console.log(unknownValue.foo); // 타입 가드 이후 안전함
}

// 필요 시 명시적 타입 강제 변환
(anyValue as { foo: string }).foo; // 명시적으로 위험하나 의도적인 접근

구성

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

allowOptionalChaining

type: boolean

기본값: false

any 값에 대해 ?. 옵셔널 체이닝을 허용할지 여부. true로 설정하면 any 값에 대한 옵셔널 체이닝이 경고되지 않습니다. 기본값은 false입니다.

사용 방법

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

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

참고 자료