typescript/prefer-reduce-type-parameter スタイル
何をしますか
このルールは、Array.reduce の蓄積変数に型パラメータを使用することを推奨し、キャストを避けるようにします。
なぜ問題ですか?
Array.reduce は、蓄積変数の型を指定するためにジェネリックな型パラメータを使用できます。これは結果をキャストするよりも優れており、より良い型安全性を提供し、意図する型が明確になります。
例
このルールに対して誤りなコードの例:
ts
const numbers = [1, 2, 3];
// 結果のキャスト
const sum = numbers.reduce((acc, val) => acc + val, 0) as number;
// 蓄積変数に対する型アサーションの使用
const result = [1, 2, 3].reduce((acc: string[], curr) => {
acc.push(curr.toString());
return acc;
}, [] as string[]);このルールに対して正しいコードの例:
ts
const numbers = [1, 2, 3];
// 型パラメータの使用
const sum = numbers.reduce<number>((acc, val) => acc + val, 0);
// 複雑な型に対する型パラメータ
const result = [1, 2, 3].reduce<string[]>((acc, curr) => {
acc.push(curr.toString());
return acc;
}, []);
// TypeScript が型を推論できる場合、パラメータは不要
const simpleSum = numbers.reduce((acc, val) => acc + val, 0);
// 型パラメータ付きのオブジェクト蓄積変数
interface Count {
[key: string]: number;
}
const counts = ["a", "b", "a"].reduce<Count>((acc, item) => {
acc[item] = (acc[item] || 0) + 1;
return acc;
}, {});使い方
設定ファイルまたは CLI でこのルールを有効化するには、次のようにします:
json
{
"rules": {
"typescript/prefer-reduce-type-parameter": "error"
}
}bash
oxlint --type-aware --deny typescript/prefer-reduce-type-parameter