使用可选的链接运算符进行对象 属性 访问
Using optional chaining operator for object property access
TypeScript 3.7 现在支持 optional chaining operator。因此,您可以编写如下代码:
const value = a?.b?.c;
即,您可以使用此运算符访问对象的属性,其中对象本身可能是 null
或 undefined
。现在我想做的基本上是一样的,但是 属性 名称是动态的:
const value = a?[b]?.c;
但是,我收到一个语法错误:
error TS1005: ':' expected.
我在这里做错了什么?这可能吗?
proposal 似乎暗示这是不可能的(但也许我把语法示例弄错了)。
使用方括号表示法和可选链接访问 属性 时,除了方括号外还需要使用点:
const value = a?.[b]?.c;
这是 TC39 proposal 采用的语法,否则解析器很难判断此 ?
是三元表达式的一部分还是可选链的一部分。
我的想法是:可选链接的符号不是 ?
,而是 ?.
。如果您正在进行可选链接,您将始终使用这两个字符。
可选链接运算符是 ?.
以下是可空 属性 和函数处理的一些示例。
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
奖励:默认值
??
(Nullish Coalescing)可用于在未定义或 null 时设置默认值。
const notNull = possiblyNull ?? defaultValue
const alsoNotNull = a?.b?.c ?? possiblyNullFallback ?? defaultValue
TypeScript 3.7 现在支持 optional chaining operator。因此,您可以编写如下代码:
const value = a?.b?.c;
即,您可以使用此运算符访问对象的属性,其中对象本身可能是 null
或 undefined
。现在我想做的基本上是一样的,但是 属性 名称是动态的:
const value = a?[b]?.c;
但是,我收到一个语法错误:
error TS1005: ':' expected.
我在这里做错了什么?这可能吗?
proposal 似乎暗示这是不可能的(但也许我把语法示例弄错了)。
使用方括号表示法和可选链接访问 属性 时,除了方括号外还需要使用点:
const value = a?.[b]?.c;
这是 TC39 proposal 采用的语法,否则解析器很难判断此 ?
是三元表达式的一部分还是可选链的一部分。
我的想法是:可选链接的符号不是 ?
,而是 ?.
。如果您正在进行可选链接,您将始终使用这两个字符。
可选链接运算符是 ?.
以下是可空 属性 和函数处理的一些示例。
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
奖励:默认值
??
(Nullish Coalescing)可用于在未定义或 null 时设置默认值。
const notNull = possiblyNull ?? defaultValue
const alsoNotNull = a?.b?.c ?? possiblyNullFallback ?? defaultValue