reactjs - TypeScript + React 获取不同类型的数组
问题描述
我有三种类型
class Media {
private _id: number;
//getters and setters
}
class Serial extends Media {
private _watched_series: number;
//getters and setters
}
class Movie extends Media {
private _watched: boolean;
//getters and setters
}
和后端具有相同的结构。后端返回Array<Media>
,但包含子类型。
我正在尝试这个:
ListsApi.mediasFromList(list.id).then((response: Response) => {
response.json().then((value: Array<Movie | Serial>) => {
this.setState({medias: value});
});
});
但是当我尝试使用时,typeof
我总是得到object
.
我究竟做错了什么?我正在尝试在媒体fromJson
中编写函数以从原始 json 对象创建对象,但后来我不明白如何确定原始对象的类型。
提前感谢您的回答。
解决方案
在尝试确定原始 JSON 对象的类型时,您必须手动检查对象的属性以测试它是否与特定类型匹配。以下函数可用于确定您的媒体是否属于该Movie
类型:
isMovie(input: Movie | Serial): input is Movie {
return input.hasOwnProperty('_watched');
}
然后当您测试它是否是Movie
或Serial
输入时:
if (this.isMovie(media)) {
// media will now be treated as type `Movie`
}
推荐阅读
- c# - 使用 C# 创建 Instagram 帐户
- android - 尝试使用 /kittinunf/fuel lib 从 android ver 9 及更低版本访问 tls 1.3 站点
- nopcommerce - 如何在 NopCommerce 4.40.3 中删除标签
- django - django-单击href链接会将我重定向到索引页面而不是指向的网页
- jquery - 如何修复停止 DIVI 编辑屏幕 DIVI 编辑器工作的 jQuery 错误
- mongodb - 如何对数组中的特定数组求和?
- reactjs - Mongosse new Modal() 在 Next js App 中不起作用?
- radix-sort - 基数排序中的数组访问
- flutter - Flutter Flame 中的滚动背景
- html - 在反应中分享网址的图标的动态变化