打字稿-联合类型

时间:2018-11-30 19:45:26

标签: typescript

我创建了以下界面:

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类型一起使用?

1 个答案:

答案 0 :(得分:2)

简短回答

  

为什么编译器在Date中搜索秒,而不适用于Timestamp类型?

使用联合类型时,编译器仅允许访问所有类型上存在的属性 。发生您的错误是因为seconds仅存在于Timestamp上,而不存在于Date上。

示例

在这里,我们创建一个Message的{​​{1}}的{​​{1}}。

Timestamp

在以下代码中,编译器不知道dateconst message: Message = { date: { seconds: 10, nanoseconds: 10 } } 。就编译器而言,dateTimestampdate

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上的文档。