microsoft / microsoft/TypeScript

Bloomberg feedback for 5.9

Ouverte
#62,156 1 commentaire 7 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Discussion
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

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](https://github.com/microsoft/TypeScript/issues/62153) |
| 2 | `Promise.all` over constant tuples no longer infers tuple | Type Checking | No | <1% | [#62071](https://github.com/microsoft/TypeScript/issues/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:

```ts
export const ClassExpression = class {
#context = 0
};
```

Produces invalid declaration output:

```ts
export declare const ClassExpression: {
new (): {
#context: number;
};
};
```

5.8 output was also incorrect but at least syntactically valid:

```ts
export declare const ClassExpression: {
new (): {
"__#1@#context": number;
};
};
```

❗This seems like a major regression, since emitted declarations are now invalid.
Tracked in [#62153](https://github.com/microsoft/TypeScript/issues/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:

```ts
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](https://github.com/microsoft/TypeScript/issues/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.

```ts
(test ?? true) ? A : B
```

Becomes:

```ts
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.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par les extraits de reproduction dans l’issue et les tickets liés #62153 et #62071, qui suivent deux des régressions signalées. Comparez le comportement de déclaration ou de type-checking entre 5.8 et 5.9, puis limitez tout travail à une régression confirmée ; le rapport lui-même n’identifie ni fichiers, ni tests, ni une définition of done unique.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript, typescript
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
15/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.