microsoft / microsoft/TypeScript

Import ellision emit bug: usage of imports only in keys of interfaces does not result in those imports being elided as type-only

Offen
#58,081 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Domain: JS Emit Help Wanted
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

🔎 Search Terms

import ellision emit

🕗 Version & Regression Information
  • This is the behavior in every version I tried - I saw it in typescript 4.9 and in the playground in typescript 5.4.3.
⏯ Playground Link

https://www.typescriptlang.org/play?importHelpers=true&target=99&module=2#code/JYWwDg9gTgLgBAbwEIEEBKBfOAzKERwDkARgIZSEDcAsAFCiSxwBUcpAzjhBDngYdm5U6dAKYAPRvGAA7GKKjZSAY1Fw03GAGUYpeYjpw4AbVRoAugC447GFFkBzGrSPHBEAHRkoVm3cfOGHRAA

💻 Code
import {BAR} from 'bar';
import * as foo from 'foo';

export interface RootState {
  [BAR]: string;
  [foo.bar]: string;
}
🙁 Actual behavior

When compiled to ESNext module:

import { BAR } from 'bar';
import * as foo from 'foo';

when compiled to AMD with importHelpers it's interesting that __importStar appears

define(["require", "exports", "tslib", "bar", "foo"], function (require, exports, tslib_1, bar_1, foo) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    foo = tslib_1.__importStar(foo);
});
🙂 Expected behavior

output should be an entirely empty module, e.g. AMD should be

define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
});

ESNext should be

export {}
Additional information about the issue

No response

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit dem verknüpften TypeScript Playground und dem Beispiel mit den minimalen Imports/Interfaces und vergleiche dann die ESNext- und AMD-Ausgaben mit dem berichteten Verhalten. Erledigt ist die Aufgabe, wenn Imports, die nur in Interface-Schlüsseln verwendet werden, entfernt werden und dadurch export {} für ESNext sowie ein AMD-Modul entstehen, das nur require und exports enthält.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.