簡體   English   中英

使用 object 屬性訪問的可選鏈接運算符

[英]Using optional chaining operator for object property access

TypeScript 3.7 現在支持可選的鏈接運算符 因此,您可以編寫如下代碼:

const value = a?.b?.c;

即,您可以使用此運算符訪問 object 的屬性,其中 object 本身可能是nullundefined 現在我想做的基本上是一樣的,但是屬性名是動態的:

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

但是,我得到一個語法錯誤:

錯誤 TS1005: ':' 預期。

我在這里做錯了什么? 這甚至可能嗎?

提案似乎暗示這是不可能的(但也許我弄錯了語法示例)。

使用括號表示法和可選鏈接訪問屬性時,除了括號之外,您還需要使用點:

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

這是TC39 提案所采用的語法,否則解析器很難判斷這是否是? 是三元表達式的一部分或可選鏈接的一部分。

我的想法是:可選鏈接的符號不是? ,是?. . 如果您正在執行可選鏈接,您將始終使用這兩個字符。

可選鏈接運算符是?.

以下是可為空屬性和 function 處理的一些示例。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM