-
-
Notifications
You must be signed in to change notification settings - Fork 4
Description
Issue type:
- ➕ Feature request
Short description:
The optional chaining operator allows for short-circuiting operations instead of crashing on undefined values. This is very useful with functions that can return undefined, for example targetBlock on entities.
In this code
if (player.targetBlock().mod() == "Pipez") {}If the player isn't looking at a block, the script will crash with a ".mod is not a property of undefined" error. The code I often use to fix this is
if (player.targetBlock() != undefined && player.targetBlock().mod() == "Pipez") {}TypeScript does not accept this since it gives a race condition where the block might have changed. The correct way is something like
var _temp = player.targetBlock();
if (_temp != undefined && _temp.mod() == "Pipez") {}With the TypeScript ?. replacement generated code when targeting es2019 or earlier being
var _a;
if (((_a = player.targetBlock()) === null || _a === void 0 ? void 0 : _a.mod()) == "Pipez") {}Comparing all of this to if ?. was available:
if (player.targetBlock()?.mod() == "Pipez") {}It's clear that this would be a massive win for ease of use and readability. I am unsure what effect it would have on performance.
If this is impossible to add due to the backend, then the manual should be updated, as it says:
All features allowed by ECMAScript (ECMA-262) are available.
But does not specify which version of ECMAScript (ECMA-262) is available, with ?. having been added in version 10.0
Metadata
Metadata
Assignees
Labels
Type
Projects
Status