本文へスキップ

require-array-sort-compare

Array#sortArray#toSortedの呼び出しで常に`compareFunction`を提供することを要求します。

💭

このルールには 型情報 が必要です。

比較関数を指定せずに呼び出された場合、Array#sort()Array#toSorted()は、定義されていない配列要素以外のすべての要素を文字列に変換し、その文字列をUTF-16コードユニットに基づいて比較します[ECMA仕様]。

その結果、要素の型に関係なく、アルファベット順にソートされます。たとえば、数値をソートする場合、「10が2より前」という順序になります。

[1, 2, 3, 10, 20, 30].sort(); //→ [1, 10, 2, 20, 3, 30]

このルールは、比較引数を指定せずにソートメソッドを呼び出した場合に報告します。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/require-array-sort-compare": "error"
}
};

このルールをPlaygroundでお試しください ↗

このルールは、ネイティブのソートメソッドの呼び出しすべてで`compareFunction`が提供されることを保証することを目的としており、ユーザー定義メソッドへの呼び出しは無視します。

const array: any[];
const stringArray: string[];

array.sort();

// String arrays should be sorted using `String#localeCompare`.
stringArray.sort();
Playgroundで開く

オプション

このルールは、以下のオプションを受け入れます。

type Options = [
{
/** Whether to ignore arrays in which all elements are strings. */
ignoreStringArrays?: boolean;
},
];

const defaultOptions: Options = [{ ignoreStringArrays: true }];

ignoreStringArrays

`{ ignoreStringArrays: true }` を使用したこのルールのコード例

const one = 1;
const two = 2;
const three = 3;
[one, two, three].sort();
Playgroundで開く

使用しない場合

意図的に配列を常に文字列のような方法でソートする場合は、このルールを安全にオフにすることができます。


型チェックされたlintルールは従来のlintルールよりも強力ですが、型チェックされたlintの構成も必要です。型チェックされたルールを有効にした後にパフォーマンスの低下が発生する場合は、パフォーマンスに関するトラブルシューティングを参照してください。

リソース