array-type
要求統一使用 `T[]` 或 `Array<T>` 定義陣列。
🎨
延伸 "plugin:@typescript-eslint/樣式"
中的 ESLint 設定檔 啟用此規則。
🔧
此規則報告的某些問題可以自動透過 --fix
ESLint 命令列選項修正.
TypeScript 提供兩種相等的方式來定義陣列類型:`T[]` 和 `Array<T>`。這兩種樣式在功能上是相等的。在你的程式碼庫中統一使用相同的樣式能讓開發者更容易讀懂和理解陣列類型。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/array-type": "error"
}
};
在遊樂場嘗試此規則 ↗
選項
此規則接受以下選項
type ArrayOption = 'array' | 'array-simple' | 'generic';
type Options = [
{
/** The array type expected for mutable cases. */
default?: ArrayOption;
/** The array type expected for readonly cases. If omitted, the value for `default` will be used. */
readonly?: ArrayOption;
},
];
const defaultOptions: Options = [{ default: 'array' }];
預設設定會強制執行所有可變和唯讀陣列都使用 `'array'` 語法。
"array"
永遠對所有陣列類型使用 `T[]` 或 `readonly T[]`。
- ❌ 錯誤
- ✅ 正確
"generic"
對所有陣列類型類型永遠使用 Array<T>
或 ReadonlyArray<T>
。
- ❌ 錯誤
- ✅ 正確
"array-simple"
對簡單類型(即類型只是一些原始名稱或類型參考)使用 T[]
或 readonly T[]
。對其他所有類型(聯合類型、交集類型、物件類型、函數類型等)使用 Array<T>
或 ReadonlyArray<T>
。
- ❌ 錯誤
- ✅ 正確
const a: (string | number)[] = ['a', 'b'];
const b: { prop: string }[] = [{ prop: 'a' }];
const c: (() => void)[] = [() => {}];
const d: Array<MyType> = ['a', 'b'];
const e: Array<string> = ['a', 'b'];
const f: ReadonlyArray<string> = ['a', 'b'];
在遊樂場中開啟const a: Array<string | number> = ['a', 'b'];
const b: Array<{ prop: string }> = [{ prop: 'a' }];
const c: Array<() => void> = [() => {}];
const d: MyType[] = ['a', 'b'];
const e: string[] = ['a', 'b'];
const f: readonly string[] = ['a', 'b'];
在遊樂場中開啟組合矩陣
此矩陣列出所有可能的選項組合和對各種陣列類型的預期結果。
預設選項 | 唯讀選項 | 具有簡單類型的陣列 | 具有非簡單類型的陣列 | 唯讀陣列,具有簡單類型 | 唯讀陣列,具有非簡單類型 |
---|---|---|---|---|---|
陣列 | number[] | (Foo & Bar)[] | readonly number[] | readonly (Foo & Bar)[] | |
陣列 | 陣列 | number[] | (Foo & Bar)[] | readonly number[] | readonly (Foo & Bar)[] |
陣列 | array-simple | number[] | (Foo & Bar)[] | readonly number[] | ReadonlyArray<Foo & Bar> |
陣列 | generic | number[] | (Foo & Bar)[] | ReadonlyArray<number> | ReadonlyArray<Foo & Bar> |
array-simple | number[] | Array<Foo & Bar> | readonly number[] | ReadonlyArray<Foo & Bar> | |
array-simple | 陣列 | number[] | Array<Foo & Bar> | readonly number[] | readonly (Foo & Bar)[] |
array-simple | array-simple | number[] | Array<Foo & Bar> | readonly number[] | ReadonlyArray<Foo & Bar> |
array-simple | generic | number[] | Array<Foo & Bar> | ReadonlyArray<number> | ReadonlyArray<Foo & Bar> |
generic | Array<number> | Array<Foo & Bar> | ReadonlyArray<number> | ReadonlyArray<Foo & Bar> | |
generic | 陣列 | Array<number> | Array<Foo & Bar> | readonly number[] | readonly (Foo & Bar)[] |
generic | array-simple | Array<number> | Array<Foo & Bar> | readonly number[] | ReadonlyArray<Foo & Bar> |
generic | generic | Array<number> | Array<Foo & Bar> | ReadonlyArray<number> | ReadonlyArray<Foo & Bar> |
何時不使用
此規則只是用來維持專案中一致性的風格化規則。若您不想讓陣列類型保持一致的風格,您可以關閉此規則。
但是,請記住,不一致的風格會損害專案的可讀性。我們建議針對此規則選出單一選項,此選項最適用於您的專案。