【问题标题】:How to cast to array in TypeScript 2?如何在 TypeScript 2 中转换为数组?
【发布时间】:2016-09-22 22:46:06
【问题描述】:

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

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

但是在升级到 ts2 时,我得到:

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

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

我试过as [IMyType] 并且它有效,但我不想指定类型,因为我只需要array.prototype 函数在这里......而且,我不认为你实际上是这样做的。

【问题讨论】:

  • result.data['value']的类型是什么?
  • 只是一个简单的数组。
  • 我的意思是,我可以将它转换为我的最终类型 [IWhatever] 但我觉得这里没有必要,我只想使用数组方法。

标签: javascript typescript casting typescript2.0


【解决方案1】:

由于某种原因,编译器认为 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 中它会是一个数组,但是元组可以让你定义一个具有特定类型的固定长度的数组。

【讨论】:

    【解决方案2】:

    您没有投射到数组。

    [string] 是具有单个元素 string 的元组。

    [string, string] 是一个包含两个元素的元组,stringstring

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

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

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

    【讨论】:

      【解决方案3】:

      除了前面提到的转换语法选项之外,您还可以执行以下操作:

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

      【讨论】:

        猜你喜欢
        • 2016-08-18
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 2017-09-10
        • 2018-12-17
        • 2020-10-29
        • 2023-02-05
        相关资源
        最近更新 更多