【问题标题】:Array<Type> VS Type[] in TypescriptTypescript 中的 Array<Type> VS Type[]
【发布时间】:2022-04-20 14:20:09
【问题描述】:

据我所知,当属性为数组时,可以通过两种方式定义属性的类型。

property_name: type

类型可以是任何一个

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

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

这两种情况的区别是什么?还是我误解了某些东西(也许是关于铸造中使用的 的东西?)

EDIT 因为该问题被标记为重复,我知道还有关于 any[] 的其他问题,但我在发布之前仍然查看了它,对我来说它更多的是关于类型'any' 比不同的 [] VS 我问过

【问题讨论】:

  • Typescript Array vs any[]的可能重复
  • 它们实际上是相同的构造,并且在运行时实际上是相同的对象。 Reflect-metadata 也将它们都视为具有 Array 对象作为它们的构造函数。请参阅上面的链接答案。
  • @NitzanTomer 这个问题已经过时了——Array&lt;T&gt; 那时还不存在。
  • @NathanShively-Sanders 有或没有泛型,答案都是一样的,因为这个问题可以简化为“let x: Array;let x: any[]; 有什么不同”

标签: typescript


【解决方案1】:

没有任何语义差异

完全没有区别。 Type[]Type 数组的简写语法Array&lt;Type&gt;通用语法。它们是完全等价的。

手册提供an example here。相当于写:

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;
}

这是来自some release notes的引述:

具体来说,number[]Array&lt;number&gt; 的简写版本,就像 Date[]Array&lt;Date&gt; 的简写一样。

关于readonly 类型修饰符

TypeScript 3.4,引入了readonly 类型修饰符。与a precision

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

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

以下声明等价于readonly boolean[]

let okay2: ReadonlyArray<boolean>;

【讨论】:

  • @dragonmnl,它是一个泛型类型。只需阅读the Handbook 中的“Hello World of generics”部分即可。
  • 没有官方推荐。我个人使用速记并且只使用速记 (type[]),因为它更容易阅读。
  • 如果我做对了,在readonly 的情况下,它实际上并不是必需的。如果你喜欢长符号,你可以这样写:let err2: ReadonlyArray&lt;boolean&gt;;
  • @n4nn31355 我想是的。我编辑添加了这个通知。
【解决方案2】:

定义固定长度的数组时会有所不同。你不能用Array&lt;&gt;定义一个固定长度的数组,你必须使用简写语法:

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])

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 2021-04-15
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多