使用可选的链接运算符进行对象属性访问

时间:2019-11-09 15:42:14

标签: javascript typescript optional-chaining

TypeScript 3.7现在支持optional chaining operator。因此,您可以编写如下代码:

const value = a?.b?.c;

也就是说,您可以使用此运算符访问对象的属性,其中对象本身可以是nullundefined。现在我想做的基本上是相同的,但是属性名称是动态的:

const value = a?[b]?.c;

但是,出现语法错误:

  

错误TS1005:预期为“:”。

我在这里做错了什么?这有可能吗?

PS:proposal似乎暗示不可能这样做?(但也许我弄错了语法示例)。

2 个答案:

答案 0 :(得分:4)

使用方括号符号和可选链接访问属性时,除方括号外,还需要有一个点:

const value = a?.[b]?.c;

这是TC39 proposal所采用的语法,因为否则解析器很难确定此?是三元表达式的一部分还是可选链的一部分。

答案 1 :(得分:2)

“可选链接”运算符为?.

以下是可为空的属性和函数处理的一些示例。

const example = {a: ["first", {b:3}, false]}

// Properties
example?.a  // ["first", {b:3}, false]
example?.b  // undefined

// Dynamic properties ?.[]
example?.a?.[0]     // "first"
example?.a?.[1]?.a  // undefined
example?.a?.[1]?.b  // 3

// Functions ?.()
null?.()                // undefined
validFunction?.()       // result
(() => {return 1})?.()  // 1

奖金:默认值

??(空位合并)可用于设置默认值(如果未定义或为空)。

const notNull = possiblyNull ?? defaultValue
const alsoNotNull = a?.b?.c ?? possiblyNullFallback ?? defaultValue