我创建了以下界面:
export interface Message{
date: Timestamp | Date;
}
interface Timestamp {
seconds: number;
nanoseconds: number;
}
不知道为什么-我收到以下错误:
Property 'seconds' does not exist on type 'Date | Timestamp'.
Property 'seconds' does not exist on type 'Date'.
为什么编译器在seconds
中搜索Date
,但不能与Timestamp
类型一起使用?
答案 0 :(得分:2)
为什么编译器在Date中搜索秒,而不适用于Timestamp类型?
使用联合类型时,编译器仅允许访问所有类型上存在的属性 。发生您的错误是因为seconds
仅存在于Timestamp
上,而不存在于Date
上。
在这里,我们创建一个Message
的{{1}}的{{1}}。
Timestamp
在以下代码中,编译器不知道date
是const message: Message = {
date: {
seconds: 10,
nanoseconds: 10
}
}
。就编译器而言,date
是Timestamp
或date
。
Date
要给编译器更多信息,我们可以添加类型保护。然后,编译器将知道在Timestamp
语句中,它正在处理// Property 'seconds' does not exist on type 'Timestamp | Date'.
// Property 'seconds' does not exist on type 'Date'.
const seconds = message.date.seconds;
。
if
type guards is here上的文档。