unicorn/no-instanceof-builtins 의심스러움
작동 방식
ECMAScript 내장 생성자와 함께 instanceof를 사용하는 것을 금지합니다. 왜냐하면:
- 실행 컨텍스트 간에 깨지기 때문 (
iframe, 웹 워커, 노드vm등); - 종종 오해를 초래하기 때문 (예: 서브클래스에서는
instanceof Array가 실패함); - 항상 더 명확하고 안전한 대안이 존재하기 때문 (
Array.isArray,typeof,Buffer.isBuffer, …).
왜 나쁜가?
instanceof는 실행 컨텍스트 간에 깨지며(예: iframe, 웹 워커, 노드 vm), 서브클래스나 특수 객체에 대해 잘못된 결과를 줄 수 있습니다.
예시
이 규칙에 대한 잘못된 코드 예시:
javascript
if (arr instanceof Array) { … }
if (el instanceof HTMLElement) { … }이 규칙에 대한 올바른 코드 예시:
javascript
if (Array.isArray(arr)) { … }
if (el?.nodeType === 1) { … }구성
이 규칙은 다음 속성을 가진 구성 객체를 수용합니다.
exclude
type: string[]
기본값: []
검사에서 제외할 생성자 이름 목록입니다.
include
type: string[]
기본 설정 외에 추가로 검사할 생성자 이름 목록입니다. 이 옵션을 사용하여 규칙을 추가 생성자로 확장할 수 있습니다.
strategy
type: "strict" | "loose"
기본값: "loose"
어떤 내장 생성자를 검사할지 조절합니다.
"loose"(기본값):Array,Function,Error(만약useErrorIsError가 참일 경우), 그리고 원시 타입 래퍼만 검사"strict":Error유형, 컬렉션, 타입화된 배열, 기타 내장 생성자도 추가로 검사
useErrorIsError
type: boolean
기본값: false
true로 설정 시 instanceof Error를 검사하고, 대신 Error.isError()를 사용하도록 권고합니다. 이 기능을 사용하려면 전역 함수 Error.isError()가 사용 가능해야 합니다.
사용 방법
이 규칙을 활성화하려면 구성 파일이나 명령줄 인터페이스를 통해 다음과 같이 사용할 수 있습니다:
json
{
"rules": {
"unicorn/no-instanceof-builtins": "error"
}
}bash
oxlint --deny unicorn/no-instanceof-builtins