Microsoft/TypeScript

Code generated for optional call could be optimized when the result is unused

Open

#38 835 ouverte le 28 mai 2020

Voir sur GitHub
 (3 commentaires) (0 réactions) (0 assignés)TypeScript (6 726 forks)batch import
Effort: ModerateExperience EnhancementHelp WantedSuggestion

Métriques du dépôt

Stars
 (48 455 stars)
Métriques de merge PR
 (Merge moyen 2j 7h) (8 PRs mergées en 30 j)

Description

The generated code for optional chaining is a little verbose when the "return" value of the expression is not being used. For example, when simply calling a function:

maybe.close?.()

Here is a more complete example.

The second example generates:

(_c = (_b = perhaps.maybe) === null || _b === void 0 ? void 0 : _b.close) === null || _c === void 0 ? void 0 : _c.call(_b);

But could be optimized to:

(_b = perhaps.maybe) !== null && _b !== void 0 && (_c = _b.close) !== null && _c !== void 0 && _c.call(_b);

It's not a huge difference, but it saves 8 characters for each link in the chain.

While the spec says something like: "the expression short-circuits with a return value of undefined", when the return value is meaningless, then only the "short-circuit" part is important.

Guide contributeur