javascript - 如何在 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 在这里快乐?
解决方案
只需转换为validData []。
const filteredData: validData[] = mixedData.filter((obj: IValid | IError) => !obj.hasOwnProperty('error')) as validData[];
推荐阅读
- sql - 如何根据 SQL 中涉及另一个表的条件对一个表中的值进行平均?
- javascript - 如何防止 Javascript 在其范围之外更改参数值?
- css - 响应较小屏幕的卡片 img 被剪切
- python - 在 Python 中对固定效应模型执行中介分析
- sql-server - 使用 INSERT 中的值插入触发器之后
- swift - SwiftUI Segmented Picker 在点击时不会切换
- postgresql - 我可以使用特殊字符来拆分聚合吗?PostgreSQL
- azure - 使用 GoDaddy 的 Azure Cdn 自定义域
- javascript - 无法从“App.js”解析“react-navigation-drawer”
- c# - 当 IDENTITY_INSERT 设置为 OFF 时,无法在表“消息”中插入标识列的显式值