如何在TypeScript 2中转换为数组?

时间:2016-09-22 22:46:07

标签: javascript typescript casting typescript2.0

我有一些代码将对象强制转换为类型数组(所以我可以在对象上使用数组函数而不会出现编译错误。)

    var n = (result.data['value'] as []).map( (a)=>{
      //..
    });

但升级到ts2后,我得到:

  

错误TS1122:元组类型元素列表不能为空。

这实际上是一个语法错误,声称您忘记了逗号或值。那么,如何修改此强制转换才能正常工作?

我尝试了as [IMyType]并且它有效,但我不想指定类型,因为我在这里只需要array.prototype个功能...而且,我不认为& #39;你是如何实际做到的。

3 个答案:

答案 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]是一个元组,包含两个元素stringstring

[]是一个零元素的元组。

字符串数组的语法是string[]

您可能想要的是result.data['value'] as any[]

答案 2 :(得分:1)

除了上面提到的上一个演员语法选项之外,您还可以执行以下操作:

var n = (<SampleType[]>result.data['value']).map((a) => {
    //..
});