-
Notifications
You must be signed in to change notification settings - Fork 13k
Description
Comment
We evaluated the 5.9 RC releases and 5.9 is a low impact release for us.
# | Change | Affects | Release notes | Packages affected | PR / Issue |
---|---|---|---|---|---|
1 | Class expressions with private fields produce invalid .d.ts output |
Declaration Emit | No | <1% | #62153 |
2 | Promise.all over constant tuples no longer infers tuple |
Type Checking | No | <1% | #62071 |
3 | JavaScript emit removes parentheses around ?? in conditional expressions |
Emit | No | <1% | – |
4 | Better detection of always-true errors in ?? expressions |
Type Checking | No | <1% | – |
Class expressions with private fields produce invalid .d.ts
output
With TypeScript 5.9, the following code:
export const ClassExpression = class {
#context = 0
};
Produces invalid declaration output:
export declare const ClassExpression: {
new (): {
#context: number;
};
};
5.8 output was also incorrect but at least syntactically valid:
export declare const ClassExpression: {
new (): {
"__#1@#context": number;
};
};
❗This seems like a major regression, since emitted declarations are now invalid.
Tracked in #62153
Promise.all
over array literal no longer infers a tuple
This issue is easier to reproduce than the linked ticket may suggest. It affects any use of Promise.all
in the return position of a .then()
that chains from a promise resolving to an array:
const p = Promise.resolve([]).then(() => {
return Promise.all([0, ""]);
});
const test: Promise<[number, string]> = p; // error
This now fails to infer a tuple and infers Promise<(string | number)[]>
instead.
While we can work around this issue by assigning the result of Promise.all
to an intermediate variable, this does seem like an unfortunate regression.
Tracked in #62071
JavaScript emit removes parentheses around ??
in conditional expressions
In some cases, parentheses are removed from nullish coalescing expressions in emitted JavaScript. This change seems benign.
(test ?? true) ? A : B
Becomes:
test ?? true ? A : B
Better detection of always-true errors in ??
expressions
We observed two new diagnostics related to always-true ??
expressions.
The improved detection highlighted logic errors that were previously missed.