microsoft / microsoft/TypeScript

Missing compiler error (or emit bug) in another isolatedModules + emitDecoratorMetadata use case

Ouverte
#61,411 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

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

Description

🔎 Search Terms

"isolatedModules" "emitDecoratorMetadata"

🕗 Version & Regression Information
  • This is the behavior in every version I tried, and I reviewed the FAQ
⏯ Playground Link

https://www.typescriptlang.org/dev/bug-workbench/?importHelpers=true&experimentalDecorators=true&emitDecoratorMetadata=true&target=99&module=1&isolatedModules=true&noResolve=true&lib=lib.esnext.d.ts%2Clib.decorators.legacy.d.ts&ts=5.3.2#code/PTAEAEEsGcHsBsCGAXApgEwLK3QV3qtAFAgSoAeADqgE6QC2qAdsovACKoDGsNKvxUuFY0A5qmQAuUAFEAygDkKyEmHAVqdRizacefZAOnIauVKrL1IyPb341MExOhSJjp80PiQARtMJMygA06Nx2hjTQAHQEoohcAJ4W4ABmkARMiIzGCdQAtBq8yFHIxIU0yKDIuaigAIKgALygACwA3ETJaRlZqNK40Kh5ofr2eQDu1gAWedXUJcQMlEWgAN5VNfWgAL6gKTSw9KAARFHAc0PlxQBW0McdRFd7uExcyJCwTKAAKoTIABQASjWRFAoBoElwNC+L1CaUC6FAiGgSKYCSRKIACog+Iw0DRbAZeB1tp0nlwkNAUQANEFgnhMaAmXBvXj-cC-JlA0DkaR1YGrUnbIA

💻 Code
// @isolatedModules
// @experimentalDecorators
// @target: ESNext
// @experimentalDecorators: true
// @emitDecoratorMetadata: true
// @lib: esnext,decorators.legacy
// @filename: type-export.ts
export type A = 4;

// @filename: use-decorator-with-type.ts
import { type A } from "./type-export.js";

export function Test() {
  return undefined as any as ParameterDecorator;
}

export class X {
  constructor(@Test() x: A) {}
}
🙁 Actual behavior

The key issue here is that the emitted file for use-decorator-with-type.ts looks like this:

/* ... helpers snipped ... */
export function Test() {
    return undefined;
}
let X = class X {
    constructor(x) { }
};
X = __decorate([
    __param(0, Test()),
    __metadata("design:paramtypes", [Number])
], X);
export { X };

And the problematic line is __metadata("design:paramtypes", [Number]).

Typescript manages to avoid any broken imports and produce working runtime code but the runtime code leaks information about the type of A from the other file by using Number in the metadata. This seems like a clear violation of isolatedModules, but no compiler error is emitted.

🙂 Expected behavior

TS should either emit an isolatedModules-related error or should output something more generic than Number. If the emit is changed, though, I'm not sure what the ecosystem ramifications would be, so probably this should just be an error.

Additional information about the issue

No response

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 la reproduction fournie dans Playground en utilisant type-export.ts et use-decorator-with-type.ts, puis inspectez le chemin du compilateur responsable de isolatedModules et emitDecoratorMetadata. Reproduisez la sortie émise __metadata("design:paramtypes", [Number]) et déterminez si le fix terminé doit signaler un diagnostic isolatedModules ou modifier les métadonnées émises, avec une couverture de régression pour ce cas.

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

Évaluation

Stack technique
typescript
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
32/100

Recevez les nouvelles issues par e-mail

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