打字稿 - 可选类型

时间:2018-05-07 10:15:44

标签: typescript

如何使用Typescript中的可选类型? 例如,我有一个名为set books(book){ this._books.push(book); } get books(){ return this._books; } 的对象:

Conversation

我希望从class Conversation { lastMessage?: Message } class Message { text: string } 对象到text对象可以为Message

Conversation

但这种语法不起作用。在谈话之后我无法写const lastMessageText?: string = conversation?.lastMessage.text

2 个答案:

答案 0 :(得分:2)

有一个建议要将?.运算符添加到JavaScript中,但在规范过程中还没有足够进一步在Typescript中实现(因为Typescript希望保持JavaScript的超集,团队不会通常添加建议的功能,直到它们处于最后阶段)。

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

const conversation: Conversation = {

}
const lastMessageText = conversation.lastMessage && conversation.lastMessage.text // is of type string| undefined

修改

目前可选的链接JS功能还没有作为第3阶段,在表达级别语法方面,typescript将仅支持第3阶段的JS提议(当涉及到他们自己做的类型时)。来自latest GitHub issue请求可选更改:

  

在通过向TS添加功能而多次刻录之后,只是为了让语义地毯在最后一秒从我们身下拉出来,严重上没有任何一些支持我们会添加一个可能会极大地改变运行时行为的功能在未来的某个时刻。

答案 1 :(得分:1)

TypeScript 3.7 optional chaining开始可用。

发布3.7 here的笔记。