Array< Type>VS Type[]在Typescript中

据我所知,当属性是数组时,它的类型可以用两种方式定义。

property_name: type

type可以是哪一种

Array<string>, Array<MyType>, etc. (e.g. let prop1: Array<string>)

而且

string[], MyType[], etc. (e.g. let prop1: string[])

这两种情况之间的区别是什么?或者是我误解了什么(也许是关于<>在施法中的使用?)

编辑因为这个问题被标记为重复,我知道还有另一个关于any[]的问题,但在发布之前我还是看了一下,对我来说,它更多的是关于类型“any”而不是不同的[]VS <>我问

130189 次浏览

没有任何语义上的差异

根本没有区别。Type[]Type数组的简写语法Array<Type>通用的语法。它们完全相等。

手册提供了这里有一个例子。可以这样写:

function loggingIdentity<T>(arg: T[]): T[] {
console.log(arg.length);
return arg;
}

或者:

function loggingIdentity<T>(arg: Array<T>): Array<T> {
console.log(arg.length);
return arg;
}

下面是来自一些发行说明的引用:

具体来说,number[]Array<number>的简写版本,就像Date[]Array<Date>的简写一样。

关于readonly类型修饰符

TypeScript 3.4引入了readonly类型修饰符。精密:

readonly类型修饰符只能用于数组类型和元组类型的语法

let err2: readonly Array<boolean>; // error!
let okay: readonly boolean[]; // works fine

下面的声明等价于readonly boolean[]:

let okay2: ReadonlyArray<boolean>;

当定义固定长度的数组时,这是有区别的。你不能用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])


也许有用!

interface IPrintArray<Type> {
list: Type[]
}


function printArray<Type> (props: IPrintArray<Type>) {
return <div>  </div>
}