【问题标题】:Typescript: one of two types works not correct for interface key打字稿:两种类型中的一种不适用于界面键
【发布时间】:2020-08-31 05:17:48
【问题描述】:

我有一个界面:

export interface User {
  uid: string;
  createdAt: Timestamp | Date;
}

在我的一个组件模板中,我读取了属性:

<span>{{ user.createdAt._seconds }}</span>

但是在我的终端中,我得到了下一个错误

“日期 | 类型”上不存在属性“_seconds”时间戳'。 “日期”类型不存在属性“_seconds”。

它存在于类型Timestamp 中,但看起来typescript 并不关心它并抛出错误,因为该属性在类型Date 中不存在。

【问题讨论】:

  • 你能 console.log() 组件 ts 文件中填充的用户对象吗?它看起来像什么?
  • 它存在于Timestamp类型中,但它不存在于Date类型中,并且TS无法判断在这种特殊情况下createdAt是否包含TimestampDate .因此,执行代码时该属性不存在的可能性为 50/50。

标签: angular typescript typescript-typings


【解决方案1】:

如果可能,我建议在传递给模板之前转换为单一类型。如果没有,这里有两种选择:

投射价值

如果您知道在那种情况下它总是会是一个时间戳:

<span>{{ (user.createdAt as Timestamp)._seconds }}</span>

检查实例类型

<span>{{ user.createdAt instanceof Timestamp ? user.createdAt._seconds : user.createdAt.getSeconds() }}</span>

【讨论】:

    猜你喜欢
    • 2021-01-03
    • 2019-12-01
    • 2021-04-18
    • 2022-06-23
    • 1970-01-01
    • 2019-02-13
    • 2021-12-06
    • 2022-11-13
    • 2022-12-07
    相关资源
    最近更新 更多