array-type
要求始终使用
T[]
或Array<T>
来表示数组。
🎨
在 "plugin:@typescript-eslint/stylistic"
的 ESLint 配置文件 中扩展该规则。
🔧
此规则报告的一些问题可以通过 --fix
ESLint 命令行选项 自动修复。
TypeScript 提供两种等效的方式来定义数组类型:T[]
和 Array<T>
。这两种风格在功能上是等效的。在整个代码库中始终使用相同的风格,可以使开发人员更容易阅读和理解数组类型。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/array-type": "error"
}
};
在 playground 中尝试此规则 ↗
选项
此规则接受以下选项
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[]
。
- ❌ 错误
- ✅ 正确
const x: Array<string> = ['a', 'b'];
const y: ReadonlyArray<string> = ['a', 'b'];
在 Playground 中打开const x: string[] = ['a', 'b'];
const y: readonly string[] = ['a', 'b'];
在 Playground 中打开"generic"
始终对所有数组类型使用 Array<T>
或 ReadonlyArray<T>
。
- ❌ 错误
- ✅ 正确
const x: string[] = ['a', 'b'];
const y: readonly string[] = ['a', 'b'];
在 Playground 中打开const x: Array<string> = ['a', 'b'];
const y: ReadonlyArray<string> = ['a', 'b'];
在 Playground 中打开"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'];
在 Playground 中打开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'];
在 Playground 中打开组合矩阵
此矩阵列出了所有可能的选项组合及其对不同类型数组的预期结果。
defaultOption | readonlyOption | 具有简单类型的数组 | 包含非简单类型的数组 | 只读简单类型数组 | 只读非简单类型数组 |
---|---|---|---|---|---|
数组 | number[] | (Foo & Bar)[] | 只读 number[] | 只读 (Foo & Bar)[] | |
数组 | 数组 | number[] | (Foo & Bar)[] | 只读 number[] | 只读 (Foo & Bar)[] |
数组 | 数组-简单 | number[] | (Foo & Bar)[] | 只读 number[] | ReadonlyArray<Foo & Bar> |
数组 | 泛型 | number[] | (Foo & Bar)[] | ReadonlyArray<number> | ReadonlyArray<Foo & Bar> |
数组-简单 | number[] | Array<Foo & Bar> | 只读 number[] | ReadonlyArray<Foo & Bar> | |
数组-简单 | 数组 | number[] | Array<Foo & Bar> | 只读 number[] | 只读 (Foo & Bar)[] |
数组-简单 | 数组-简单 | number[] | Array<Foo & Bar> | 只读 number[] | ReadonlyArray<Foo & Bar> |
数组-简单 | 泛型 | number[] | Array<Foo & Bar> | ReadonlyArray<number> | ReadonlyArray<Foo & Bar> |
泛型 | Array<number> | Array<Foo & Bar> | ReadonlyArray<number> | ReadonlyArray<Foo & Bar> | |
泛型 | 数组 | Array<number> | Array<Foo & Bar> | 只读 number[] | 只读 (Foo & Bar)[] |
泛型 | 数组-简单 | Array<number> | Array<Foo & Bar> | 只读 number[] | ReadonlyArray<Foo & Bar> |
泛型 | 泛型 | Array<number> | Array<Foo & Bar> | ReadonlyArray<number> | ReadonlyArray<Foo & Bar> |
何时不使用它
此规则纯粹是用于在项目中保持一致性的风格规则。如果您不想为数组类型保持一致的风格,可以将其关闭。
但是,请记住,不一致的风格会损害项目的可读性。我们建议为该规则选择一个最适合您的项目的选项。