下面是我所拥有的类型的一个示例
type Place = {
address: string
}
type Location = {
latLng: string
}
type User = {
name: string
} & (Place | Location)
所以当我试图在解析数据时使用它
const { name, address, latLng } = user;
它显示TS错误类型“User”上不存在属性“address”
从技术上讲,我知道地址或latLng将出现,但不是两者都出现,这是我需要的,我的逻辑将在解析数据时验证它。但如何让TS知道这一点,并删除此错误?
1条答案
按热度按时间pkwftd7m1#
这是使用
never
的一个很好的地方。这允许您设置User的两个“配置”,它们将具有Place或Loc。Place类型强制执行未定义的latLng,而Loc类型强制执行未定义的地址。User是({name: string} & Place) | ({name: string} & Loc)
中的一个,因此尽管所有三个字段都存在于联合体中的两种类型中,地址或latLng将基于另一个的存在而未定义。(Playground链接)
这给了你一个类型,它可以定义
address
或latLng
,但不能同时定义两者。你可以从user
中解构出这两个值,但其中一个是未定义的。