string []和[string]之间的区别

时间:2016-09-21 10:26:03

标签: typescript types

考虑以下的Typescript示例。第一行导致错误'type undefined []不能分配给[string]'类型。最后两行确实编译。

let givesAnError: [string] = [];
let isOK: string[] = [];
let isAlsoOK: [string] = ["foo"];

如何解释Typescript中的类型定义[string]

2 个答案:

答案 0 :(得分:16)

第一个(givesAnError)和最后一个(isAlsoOKare tuples,第二个(isOK)是一个数组。

对于数组,所有元素的类型都相同:

let a: string[];
let b: boolean[];
let c: any[];

但是对于元组,你可以有不同的类型(和固定长度):

let a: [string, boolean, number];
let b: [any, any, string];

所以:

a = ["str1", true, 4]; // fine
b = [true, 3, "str"]; // fine

可是:

a = [4, true, 3]; // not fine as the first element is not a string
b = [true, 3]; // not fine because b has only two elements instead of 3

重要的是要理解javascript输出将始终使用数组,因为在js中没有tuple这样的东西。
但是对于编译时间它很有用。

答案 1 :(得分:2)

直接

string[] // n-length array, must only contain strings

[string] // must be 1-length array, first element must be a string