考虑以下的Typescript示例。第一行导致错误'type undefined []不能分配给[string]'类型。最后两行确实编译。
let givesAnError: [string] = [];
let isOK: string[] = [];
let isAlsoOK: [string] = ["foo"];
如何解释Typescript中的类型定义[string]
?
答案 0 :(得分:16)
第一个(givesAnError
)和最后一个(isAlsoOK
)are 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