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

Fla*_*ape 9 javascript casting typescript typescript2.0

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

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

但升级到ts2后,我得到:

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

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

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

Nit*_*mer 18

由于某种原因,编译器认为这result.data['value'] 是一个元组而不是数组.

你可以这样投:

result.data['value'] as any[]
Run Code Online (Sandbox Code Playgroud)

哪个应该告诉编译器它是一个数组,或者:

result.data['value'] as Array<any>
Run Code Online (Sandbox Code Playgroud)

如果您的数组只有类型的项目,IMyType那么只需:

result.data['value'] as IMyType[]
Run Code Online (Sandbox Code Playgroud)

但是,如果您的数组包含不同类型的项目,那么它可以是一个any[]或一个元组,例如:

result.data['value'] as [IMyType, string, string]
Run Code Online (Sandbox Code Playgroud)

在任何情况下,在编译的js中它将是一个数组,但是元组允许您定义具有特定类型的固定长度数组.


cdb*_*rin 7

你没有投射到数组.

[string]是一个单元素的元组string.

[string, string]是一个有两个元素的元组,stringstring.

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

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

你可能想要的是什么result.data['value'] as any[].