[英]Property does not exist on type 'object' - Union type
I have defined two interfaces:我定义了两个接口:
interface movieProps {
adult: boolean,
backdrop_path: string,
genre_ids: number[],
id: number,
original_language: string,
original_title: string,
overview: string,
popularity: number,
poster_path: string,
release_date: string,
title: string,
video: boolean,
vote_average: number,
vote_count: number,
mediaType: string,
documentID: string
}
interface gameReleaseDate {
id: number,
category: number,
created_at: number,
date: number,
game: game,
human: string,
m: number,
platform: number,
region: number,
updated_at: number,
y: number,
documentID: string,
mediaType: string
}
I have defined a variable with a union type using allCountdownItems: movieProps[] | gameReleaseDate[]
我已经使用allCountdownItems: movieProps[] | gameReleaseDate[]
定义了一个具有联合类型的变量allCountdownItems: movieProps[] | gameReleaseDate[]
allCountdownItems: movieProps[] | gameReleaseDate[]
that contain both types of objects. allCountdownItems: movieProps[] | gameReleaseDate[]
包含这两种类型的对象。
I am using .map()
to render info for each item.我正在使用.map()
来呈现每个项目的信息。 I am doing this by using:我这样做是通过使用:
return (
<div>
{(this.state.allCountdownItems as Array<movieProps | gameReleaseDate>).map(item => {
return (
<h2>{item.mediaType === "movie" ? item.title : item.game.name}</h2>
)
})}
</div>
)
This give me the following error:这给了我以下错误:
Property 'title' does not exist on type 'movieProps |类型 'movieProps | 上不存在属性 'title' gameReleaseDate'.游戏发布日期'。 Property 'title' does not exist on type 'gameReleaseDate'.ts(2339)类型“gameReleaseDate”.ts(2339) 上不存在属性“title”
How can I solve this without declaring item
as an any
type?如何在不将item
声明为any
类型的情况下解决此问题?
You are trying to discriminate between the union with item.mediaType === "movie"
您试图区分与item.mediaType === "movie"
In order for that to work you need to declare literal members on the union member ie为了使其工作,您需要在联合成员上声明文字成员,即
interface movieProps {
adult: boolean,
backdrop_path: string,
genre_ids: number[],
id: number,
original_language: string,
original_title: string,
overview: string,
popularity: number,
poster_path: string,
release_date: string,
title: string,
video: boolean,
vote_average: number,
vote_count: number,
mediaType:'movie' // HERE
documentID: string
}
interface gameReleaseDate {
id: number,
category: number,
created_at: number,
date: number,
game: game,
human: string,
m: number,
platform: number,
region: number,
updated_at: number,
y: number,
documentID: string,
mediaType:'game' // HERE
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.