Issue type:
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
Issue type:
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 exampletargetBlockon entities.In this code
If the player isn't looking at a block, the script will crash with a "
.modis not a property ofundefined" error. The code I often use to fix this isTypeScript does not accept this since it gives a race condition where the block might have changed. The correct way is something like
With the TypeScript
?.replacement generated code when targetinges2019or earlier beingComparing all of this to if
?.was available: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:
But does not specify which version of
ECMAScript (ECMA-262)is available, with?.having been added in version10.0