typescript/no-unsafe-member-access Pedantic
작동 방식
이 규칙은 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