unicorn/no-instanceof-builtins 懸念
何をしますか
ECMAScript の組み込みコンストラクタに対して instanceof を使用することを禁止します。理由は以下の通りです:
- 実行コンテキスト間で動作が破綻する(
iframe、Web Worker、Nodevmなど); - 結果が誤解を招くことが多い(例:サブクラスでは
instanceof Arrayが失敗する); - より明確で安全な代替手段がある(
Array.isArray、typeof、Buffer.isBufferなど)。
なぜこれは良くないですか?
instanceof は実行コンテキスト間で動作が破綻します(iframe、Web Worker、Node vm)。 また、サブクラスや特殊なオブジェクトに対して誤った結果を返す可能性があります。
例
このルールに違反する 不正な コードの例:
javascript
if (arr instanceof Array) { … }
if (el instanceof HTMLElement) { … }このルールに準拠する 正しい コードの例:
javascript
if (Array.isArray(arr)) { … }
if (el?.nodeType === 1) { … }設定
このルールは以下のプロパティを持つ設定オブジェクトを受け入れます。
exclude
type: string[]
default: []
チェックから除外するコンストラクタ名。
include
type: string[]
default: []
デフォルトセット以外にチェックする追加のコンストラクタ名。 このオプションを使用して、ルールを追加のコンストラクタで拡張できます。
strategy
type: "strict" | "loose"
default: "loose"
チェック対象となる組み込みコンストラクタを制御します。
"loose"(デフォルト):Array、Function、Error(useErrorIsErrorがtrueの場合)、およびプリミティブラッパーのみチェック"strict":Errorタイプ、コレクション、型付き配列、およびその他の組み込みコンストラクタも追加でチェック
useErrorIsError
type: boolean
default: false
true に設定すると、instanceof Error をチェックし、代わりに Error.isError() を使用するよう提案します。 これには Error.isError() 関数 が利用可能である必要があります。
使い方
設定ファイルまたは CLI でこのルールを 有効化 するには、次のようにします:
json
{
"rules": {
"unicorn/no-instanceof-builtins": "error"
}
}bash
oxlint --deny unicorn/no-instanceof-builtins