require-array-sort-compare
要求
Array#sort
和Array#toSorted
调用始终提供compareFunction
。
💭
此规则需要类型信息才能运行。
当没有比较函数调用时,Array#sort()
和 Array#toSorted()
会将所有非 undefined 数组元素转换为字符串,然后根据它们的 UTF-16 代码单元进行比较 [ECMA 规范]。
结果是元素按字母顺序排序,无论其类型如何。例如,在对数字进行排序时,这会导致“10 在 2 之前”的顺序
[1, 2, 3, 10, 20, 30].sort(); //→ [1, 10, 2, 20, 3, 30]
此规则报告对未提供 `compare` 参数的排序方法的任何调用。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/require-array-sort-compare": "error"
}
};
在游乐场中尝试此规则 ↗
示例
此规则旨在确保所有对原生排序方法的调用都提供 `compareFunction`,同时忽略对用户定义方法的调用。
- ❌ 不正确
- ✅ 正确
const array: any[];
const stringArray: string[];
array.sort();
// String arrays should be sorted using `String#localeCompare`.
stringArray.sort();
在游乐场中打开const array: any[];
const userDefinedType: { sort(): void };
array.sort((a, b) => a - b);
array.sort((a, b) => a.localeCompare(b));
userDefinedType.sort();
在游乐场中打开选项
此规则接受以下选项
type Options = [
{
/** Whether to ignore arrays in which all elements are strings. */
ignoreStringArrays?: boolean;
},
];
const defaultOptions: Options = [{ ignoreStringArrays: true }];
ignoreStringArrays
使用 ` { ignoreStringArrays: true }` 的此规则的代码示例
- ❌ 不正确
- ✅ 正确
何时不使用它
如果您有意希望您的数组始终以类似字符串的方式排序,您可以安全地关闭此规则。
类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查的规则后遇到性能下降,请参阅 性能故障排除。