首页 > 解决方案 > 如何在 TypeScript 中定义过滤后的数组

问题描述

我有一个包含两个可能值的数组。它可能包括一个预期的对象,或者一个定义错误的对象。数据可能如下所示:

// mixedData
[
    { item1: "value", item2: "value2" },
    { error: true, description: "no value found" },
];

我为这个数组制作了两种类型。一个用于有效对象,一个用于错误对象。然后我像这样定义我的数组:

const myArray: Array<IValid | IError> = [] // fetched from api

接下来我想从数组中删除每个带有错误字段的IValid对象,只留下对象:

const filteredData: IValid[] = mixedData.filter(
    (obj: IValid | IError) => !obj.hasOwnProperty("error")
);

这可行,但 TypeScript 并不真正喜欢这样,因为它仍然认为一个项目可能是IError

Error: Type '(IValid| IError)[]' is not assignable to type 'IValid[]'.

我如何让 TypeScript 在这里快乐?

标签: javascripttypescripttypescript-generics

解决方案


只需转换为validData []。

const filteredData: validData[] = mixedData.filter((obj: IValid | IError) => !obj.hasOwnProperty('error')) as validData[];

推荐阅读