打字稿数组混淆 - TS 2488 类型为“从不”
Posted
技术标签:
【中文标题】打字稿数组混淆 - TS 2488 类型为“从不”【英文标题】:Typescript array confusion - TS 2488 with Type 'never' 【发布时间】: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"
],
【问题讨论】:
【参考方案1】:编译器似乎认为apps
未初始化。它认为arr
是null
。所以它说:
类型 'never' 必须有一个 'Symbol.iterator' 方法,该方法返回一个 迭代器。
但是,可以使用强制转换apps as ILuisApp[])
来说明apps
的类型:
for (let val of apps as ILuisApp[])
console.log(val);
【讨论】:
以上是关于打字稿数组混淆 - TS 2488 类型为“从不”的主要内容,如果未能解决你的问题,请参考以下文章
打字稿错误 TS2345 错误:TS2345:“缓冲区”类型的参数不可分配给“字符串”类型的参数
打字稿:错误 TS2693:“承诺”仅指一种类型,但在此处用作值