gpt4 book ai didi

Typescript - 联合类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:34:39 25 4
gpt4 key购买 nike

我创建了以下界面:

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'.

为什么编译器在 Date 中搜索 seconds 而不能使用 Timestamp 类型?

最佳答案

简答

Why does the compiler searches for seconds in Date and doesn't work with the Timestamp type?

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

例子

这里我们创建了一个 Message,它的 date 有一个 Timestamp

const message: Message = {
date: {
seconds: 10,
nanoseconds: 10
}
}

在下面的代码中,编译器不知道date 是一个Timestamp。就编译器而言,dateDateTimestamp

// Property 'seconds' does not exist on type 'Timestamp | Date'.
// Property 'seconds' does not exist on type 'Date'.
const seconds = message.date.seconds;

类型守卫

为了给编译器更多信息,我们可以添加类型保护。然后编译器就会知道,在 if 语句中,它正在处理一个 Timestamp

if (!(message.date instanceof Date)) { 
// now we know we are dealing with a Timestamp
// the compiler will not output an error
const seconds = message.date.seconds;
}

有关 type guards is here 的文档.

关于Typescript - 联合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53563935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com