prefer-includes
indexOf
メソッドではなくincludes
メソッドの使用を強制します。
拡張 "plugin:@typescript-eslint/strict-type-checked"
を ESLint設定 で有効にすると、このルールが有効になります。
このルールによって報告される問題の一部は、 --fix
ESLintコマンドラインオプション.
このルールには 型情報 が必要です。
ES2015より前は、配列や文字列に値が存在するかどうかを確認する標準的な方法は、それぞれArray#indexOf
とString#indexOf
を使用して-1
と比較することでした。現在では、より読みやすく書きやすい代替手段があります。ES2015でString#includes
が追加され、ES2016でArray#includes
が追加されました。
このルールは、.indexOf
呼び出しを.includes
で置き換えることができる場合に報告します。さらに、このルールは、単純な正規表現のテストをString#includes
に代えて報告します。
このルールは、2つのメソッドのパラメータが同じである場合に、
includes
メソッドを持つindexOf
メソッド呼び出しのレシーバオブジェクトを報告します。一致する型には、String
、Array
、ReadonlyArray
、および型付き配列が含まれます。
module.exports = {
"rules": {
"@typescript-eslint/prefer-includes": "error"
}
};
Playgroundでこのルールを試してみてください ↗
例
- ❌ 正しくない
- ✅ 正しい
const str: string;
const array: any[];
const readonlyArray: ReadonlyArray<any>;
const typedArray: UInt8Array;
const maybe: string;
const userDefined: {
indexOf(x: any): number;
includes(x: any): boolean;
};
str.indexOf(value) !== -1;
array.indexOf(value) !== -1;
readonlyArray.indexOf(value) === -1;
typedArray.indexOf(value) > -1;
maybe?.indexOf('') !== -1;
userDefined.indexOf(value) >= 0;
/example/.test(str);
Playgroundで開くconst str: string;
const array: any[];
const readonlyArray: ReadonlyArray<any>;
const typedArray: UInt8Array;
const maybe: string;
const userDefined: {
indexOf(x: any): number;
includes(x: any): boolean;
};
str.includes(value);
array.includes(value);
!readonlyArray.includes(value);
typedArray.includes(value);
maybe?.includes('');
userDefined.includes(value);
str.includes('example');
// The two methods have different parameters.
declare const mismatchExample: {
indexOf(x: unknown, fromIndex?: number): number;
includes(x: unknown): boolean;
};
mismatchExample.indexOf(value) >= 0;
Playgroundで開くオプション
このルールは設定できません。
使用しない場合
型チェックされたlintルールは従来のlintルールよりも強力ですが、型チェックされたlintingの設定も必要です。型チェックされたルールを有効にした後にパフォーマンスの低下が発生する場合は、パフォーマンスに関するトラブルシューティングを参照してください。