![](/img/trans.png)
[英]Typescript 3.7@beta Optional Chaining operator using problem
[英]Can you explain TypeScript 3.7 Optional Chaining?
在 TypeScript 3.7.2 中,我可以使用可選鏈接。
requests?.requestsCount
你能解釋一下它是如何工作的嗎?
// before
requests ? requests.requestsCount : 0
// after
requests?.requestsCount || 0
我看到了我的代碼的編譯版本。
"use strict";
var _a;
return {
requests: ((_a = requests) === null || _a === void 0 ? void 0 : _a.requestsCount) || 0
};
你能解釋一下void 0
嗎? 在發布文檔中它應該是未定義的。
let x = (foo === null || foo === undefined) ? undefined : foo.bar.baz();
我可以安全地使用這種語法糖嗎?
這個編譯的代碼
var _a;
return {
requests: ((_a = requests) === null || _a === void 0 ? void 0 : _a.requestsCount)
};
執行以下操作
_a = requests
if _a === null || _a === undefined
return {requests: undefined}
else
return {requests: _a.requestsCount}
為什么void 0
而不僅僅是undefined
? 因為undefined
的名稱在 javascript 中沒有保留,並且可以(至少在舊引擎中)被覆蓋為其他名稱。 void 0
或void whatever
是獲得undefined
值的防彈方法。
為什么臨時變量_a
而不僅僅是requests
? 因為編譯器必須確保參數只計算一次。 想象:
someFunc()?.someProp
如果沒有臨時變量,這將調用someFunc
三次,這是不可接受的。 同樣,對於像x?.y?.z...
這樣的較長鏈,編譯器將分配更多的臨時變量_b
、 _c
等。
我希望這回答了你的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.