Skip to content
← Back to rules

typescript/prefer-reduce-type-parameter スタイル

💭 This rule requires type information.
🛠️ An auto-fix is available for this rule.

何をしますか

このルールは、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

参照