【问题标题】:Typescript array confusion - TS 2488 with Type 'never'打字稿数组混淆 - TS 2488 类型为“从不”
【发布时间】:2020-05-02 14:40:42
【问题描述】:

它们是针对应用程序类型的 TS 2488 for 循环中的以下代码错误 - 当时的类型是 never?

如果我删除 if 中的第三个比较,Array.isArray(apps),那么 for 循环 (ILuisApp[]) 中的类型是正确的,而不是类型 never。

export interface ILuisFull {
    id: string;
    name: string;
    description: string;
    culture: string;
    versionsCount: number;
    app_createdDateTime: string;
    endpointHitsCount: number;
    activeVersion: string;
    tokenizerVersion: string;
  }
  export interface ILuisApp {
    id: string;
    name: string;
    description: string;
    culture: string;
    usageScenario: string;
    domain: string;
    versionsCount: number;
    createdDateTime: string;
    endpointHitsCount: number;
    activeVersion: string;
    ownerEmail?: string;
    tokenizerVersion: string;
  }

export const transform = (apps: ILuisApp[]): ILuisFull[] => {

    if (!apps || apps.length === 0 || Array.isArray(apps)) return [] as ILuisFull[];

    let fullTable: Array<ILuisFull> = [];

    // apps is type never unless remove 3rd comparison in if above
    for (var val of apps) {
        console.log(val);
      }
    return fullTable;
}

ts 配置包括:

"target": "es5",
"module": "commonjs",
"lib": [
  "es2016",
  "es2017.object",
  "esnext.asynciterable"
],

【问题讨论】:

    标签: arrays typescript compiler-errors iterable


    【解决方案1】:

    编译器似乎认为apps 未初始化。它认为arrnull。所以它说:

    类型 'never' 必须有一个 'Symbol.iterator' 方法,该方法返回一个 迭代器。

    但是,可以使用强制转换apps as ILuisApp[]) 来说明apps 的类型:

    for (let val of apps as ILuisApp[]) {
        console.log(val);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 2019-07-26
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      相关资源
      最近更新 更多