据我所知,当属性是数组时,它的类型可以用两种方式定义。
property_name: type
type可以是哪一种
Array<string>, Array<MyType>, etc. (e.g. let prop1: Array<string>)
and
string[], MyType[], etc. (e.g. let prop1: string[])
这两种情况有什么不同?或者我误解了什么(也许是关于在类型转换中使用的<> ?)
编辑因为这个问题被标记为重复,我知道还有一个关于any[]的问题,但在发布之前我还是看了一下,对我来说,这更多的是关于类型“any”,而不是不同的[]VS <>
当定义固定长度的数组时,这是有区别的。你不能用array <>定义一个固定长度的数组,你必须使用速记语法:
const myFunc1 = (arg: [string, number, boolean]) => {
console.log(arg);
};
myFunc1(["hello world", 123, true]);
// error: TS2314: Generic type 'Array ' requires 1 type argument(s).
const myFunc2 = (arg: Array<string, number, boolean>) => {
console.log(arg);
};
myFunc2(["hello world", 123, true])
没有任何语义上的差异
根本没有区别。Type[]是Type数组的简写语法。Array<Type>是泛型语法。它们完全相等。
手册中提供了一个例子。可以这样写:
function loggingIdentity<T>(arg: T[]): T[] {
console.log(arg.length);
return arg;
}
Or:
function loggingIdentity<T>(arg: Array<T>): Array<T> {
console.log(arg.length);
return arg;
}
以下是一些发行说明中的一段话:
具体来说,number[]是Array<number>的简写版本,就像Date[]是Array<Date>的简写版本一样。
关于只读类型修饰符
TypeScript 3.4引入了只读类型修饰符。准确地说:
只读类型修饰符只能用于数组类型和元组类型的语法
let err2: readonly Array<boolean>; // error!
let okay: readonly boolean[]; // works fine
下面的声明等价于readonly boolean[]:
let okay2: ReadonlyArray<boolean>;