打字稿 - 可选类型

JaS*_*Hin 8 typescript

如何在 Typescript 中使用可选类型?例如,我有一个名为的对象Conversation

class Conversation {
    lastMessage?: Message
}

class Message {
    text: string
}
Run Code Online (Sandbox Code Playgroud)

我想通过对象textMessage对象获得可为空Conversation

const lastMessageText?: string = conversation?.lastMessage.text
Run Code Online (Sandbox Code Playgroud)

但这种语法不起作用。?谈话后我无法写作。

Rad*_*iță 5

起点TypeScript 3.7 optional chaining可用。

3.7 此处的发行说明。


Tit*_*mir 4

有人提议将?.运算符添加到 JavaScript,但在 Typescript 中实现的规范流程还不够深入(由于 Typescript 希望保持 JavaScript 的超集,团队通常不会添加提议的功能,直到它们被实现)最后阶段)。

您可以使用该&&运算符来实现类似的效果,尽管更冗长:

const conversation: Conversation = {

}
const lastMessageText = conversation.lastMessage && conversation.lastMessage.text // is of type string| undefined
Run Code Online (Sandbox Code Playgroud)

编辑

目前,可选链接 JS 功能尚未达到第 3 阶段,当涉及到表达式级别语法时,TypeScript 将仅支持处于第 3 阶段的 JS 提案(当涉及到类型时,它们会做自己的事情)。来自请求可选更改的最新 GitHub 问题

在向 TS 中添加功能多次被烧毁之后,却在最后一秒把语义地毯从我们脚下拉了出来,实际上没有多少赞成票可以让我们添加一个可能在某个时候彻底改变运行时行为的功能将来。

  • 另请参阅:https://github.com/tc39/proposal-optional-chaining 和 https://github.com/Microsoft/TypeScript/issues/16 (2认同)