TypeScript 3.7现在支持optional chaining operator。因此,您可以编写如下代码:
const value = a?.b?.c;
也就是说,您可以使用此运算符访问对象的属性,其中对象本身可以是null
或undefined
。现在我想做的基本上是相同的,但是属性名称是动态的:
const value = a?[b]?.c;
但是,出现语法错误:
错误TS1005:预期为“:”。
我在这里做错了什么?这有可能吗?
PS:proposal似乎暗示不可能这样做?(但也许我弄错了语法示例)。
答案 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