跳至主要内容

优先使用 includes

强制使用 includes 方法而不是 indexOf 方法。

🔧

此规则报告的一些问题可以通过 --fix ESLint 命令行选项 自动修复。

💭

此规则需要 类型信息 才能运行。

在 ES2015 之前,Array#indexOfString#indexOf-1 的比较是检查值是否存在于数组或字符串中的标准方法。现在存在更易于阅读和编写的替代方法:ES2015 添加了 String#includes,ES2016 添加了 Array#includes

.indexOf 调用可以替换为 .includes 时,此规则会报告。此外,此规则会报告简单正则表达式的测试,以支持 String#includes

此规则将报告任何 indexOf 方法调用接收器对象,该对象具有 includes 方法,其中两个方法具有相同的参数。匹配类型包括:StringArrayReadonlyArray 和类型化数组。

.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);
在游乐场中打开

选项

此规则不可配置。

何时不使用它

类型检查 lint 规则比传统 lint 规则更强大,但也需要配置 类型检查 lint。如果在启用类型检查规则后遇到性能下降,请参阅 性能故障排除

资源