优先使用 includes
强制使用
includes
方法而不是indexOf
方法。
🔒
在 "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
。
此规则将报告任何
indexOf
方法调用接收器对象,该对象具有includes
方法,其中两个方法具有相同的参数。匹配类型包括:String
、Array
、ReadonlyArray
和类型化数组。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/prefer-includes": "error"
}
};
在游乐场中尝试此规则 ↗
示例
- ❌ 错误
- ✅ 正确
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);
在游乐场中打开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;
在游乐场中打开选项
此规则不可配置。
何时不使用它
类型检查 lint 规则比传统 lint 规则更强大,但也需要配置 类型检查 lint。如果在启用类型检查规则后遇到性能下降,请参阅 性能故障排除。