具有不同类型的TypeScript + React fetch数组

时间:2018-08-07 04:28:13

标签: reactjs typescript types

我有三种类型

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对象创建对象,但是后来我不明白如何确定原始对象的类型。

预先感谢您的回答。

1 个答案:

答案 0 :(得分:0)

在尝试确定原始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`
}