在Typescript中的数组<Type> VS Type []

dra*_*mnl 124 typescript

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

property_name: type
Run Code Online (Sandbox Code Playgroud)

其中type可以是

Array<string>, Array<MyType>, etc. (e.g. let prop1: Array<string>)
Run Code Online (Sandbox Code Playgroud)

string[], MyType[], etc. (e.g. let prop1: string[])
Run Code Online (Sandbox Code Playgroud)

这两种情况有什么区别?或者我是否误解了某些东西(也许是关于<>用于铸造的东西?)

编辑,因为问题被标记为重复,我知道有任何关于任何[]的问题,但我仍然在发布之前看过它,对我来说,更多的是关于类型'任何'而不是不同的[] VS < >我问道

Pal*_*leo 124

没有区别.它相当于写:

function loggingIdentity<T>(arg: T[]): T[] {
    console.log(arg.length);
    return arg;
}
Run Code Online (Sandbox Code Playgroud)

要么:

function loggingIdentity<T>(arg: Array<T>): Array<T> {
    console.log(arg.length);
    return arg;
}
Run Code Online (Sandbox Code Playgroud)

资料来源:手册.

  • 它们不再_完全_相同:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#caveats (7认同)
  • 没有官方建议.我个人使用简写而只是简写(`type []`),因为它更容易阅读. (4认同)
  • 如果我猜对了,在“只读”情况下,实际上并不需要它。如果您喜欢长符号,可以这样写:`let err2: ReadonlyArray&lt;boolean&gt;;` (3认同)
  • @n4nn31355 我想是的。我编辑添加了此通知。 (3认同)
  • @dragonmnl,它是一个泛型类型。只需阅读 [the Handbook](http://www.typescriptlang.org/docs/handbook/generics.html) 中的“Hello World of generics”部分。 (2认同)

eto*_*xin 8

定义固定长度数组时存在差异。您不能使用 定义固定长度数组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])

Run Code Online (Sandbox Code Playgroud)

  • 它也称为元组 https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types 将写它不是一个固定大小的数组,但实际上是,但定义在 IMO 中仍然具有误导性。固定大小的数组看起来像“const arr = new Array&lt;number&gt;(3);”,尽管从技术上讲它不会被修复 (4认同)