我有一些代码将对象强制转换为类型数组(所以我可以在对象上使用数组函数而不会出现编译错误。)
var n = (result.data['value'] as []).map( (a)=>{
//..
});
但升级到ts2后,我得到:
错误TS1122:元组类型元素列表不能为空。
这实际上是一个语法错误,声称您忘记了逗号或值。那么,如何修改此强制转换才能正常工作?
我尝试了as [IMyType]
并且它有效,但我不想指定类型,因为我在这里只需要array.prototype
个功能...而且,我不认为& #39;你是如何实际做到的。
答案 0 :(得分:14)
由于某种原因,编译器认为result.data['value']
is a tuple而不是数组。
你可以像这样投射:
result.data['value'] as any[]
哪个应该告诉编译器它是一个数组,或者:
result.data['value'] as Array<any>
如果您的数组只包含IMyType
类型的项目,那么只需:
result.data['value'] as IMyType[]
但是,如果您的数组包含不同类型的项目,那么它可以是any[]
或元组,例如:
result.data['value'] as [IMyType, string, string]
在任何情况下,在编译的js中它将是一个数组,但是元组允许您定义具有特定类型的固定长度数组。
答案 1 :(得分:7)
您没有投射到阵列。
[string]
是一个元组string
的元组。
[string, string]
是一个元组,包含两个元素string
和string
。
[]
是一个零元素的元组。
字符串数组的语法是string[]
您可能想要的是result.data['value'] as any[]
。
答案 2 :(得分:1)
除了上面提到的上一个演员语法选项之外,您还可以执行以下操作:
var n = (<SampleType[]>result.data['value']).map((a) => {
//..
});