优先使用字符串 startsWith/endsWith
强制使用
String#startsWith
和String#endsWith
来代替其他等效的子字符串检查方法。
🎨
在 "plugin:@typescript-eslint/stylistic-type-checked"
中扩展 ESLint 配置 将启用此规则。
🔧
此规则报告的一些问题可以通过 --fix
ESLint 命令行选项 自动修复。
💭
此规则需要 类型信息 才能运行。
有多种方法可以验证字符串是否以特定字符串开头或结尾,例如 foo.indexOf('bar') === 0
。从 ES2015 开始,JavaScript 中最常见的方法是使用 String#startsWith
和 String#endsWith
。始终坚持使用这些方法有助于提高代码可读性。
当字符串方法可以安全地替换为 String#startsWith
或 String#endsWith
时,此规则会报告。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/prefer-string-starts-ends-with": "error"
}
};
在游乐场中尝试此规则 ↗
示例
- ❌ 错误
- ✅ 正确
declare const foo: string;
// starts with
foo[0] === 'b';
foo.charAt(0) === 'b';
foo.indexOf('bar') === 0;
foo.slice(0, 3) === 'bar';
foo.substring(0, 3) === 'bar';
foo.match(/^bar/) != null;
/^bar/.test(foo);
// ends with
foo[foo.length - 1] === 'b';
foo.charAt(foo.length - 1) === 'b';
foo.lastIndexOf('bar') === foo.length - 3;
foo.slice(-3) === 'bar';
foo.substring(foo.length - 3) === 'bar';
foo.match(/bar$/) != null;
/bar$/.test(foo);
在游乐场中打开declare const foo: string;
// starts with
foo.startsWith('bar');
// ends with
foo.endsWith('bar');
在游乐场中打开选项
此规则接受以下选项
type Options = [
{
/** Whether to allow equality checks against the first or last element of a string. */
allowSingleElementEquality?:
| 'never'
/** Whether to allow equality checks against the first or last element of a string. */
| 'always';
},
];
const defaultOptions: Options = [{ allowSingleElementEquality: 'never' }];
allowSingleElementEquality
如果切换到 'always'
,该规则将允许对字符串中的第一个或最后一个字符进行相等性检查。这在不处理特殊字符编码并且更喜欢简洁风格的项目中可能更可取。
以下代码默认情况下被认为是错误的,但在 allowSingleElementEquality: 'always'
时是允许的
declare const text: string;
text[0] === 'a';
text[0] === text[0].toUpperCase();
text[0] === text[1];
text[text.length - 1] === 'b';
在游乐场中打开何时不使用它
如果您不介意使用哪种字符串检查风格,可以安全地关闭此规则。但是,请记住,不一致的风格可能会损害项目中的可读性。
类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查规则后遇到性能下降,请参阅 性能故障排除。