microsoft / microsoft/TypeScript

`export { _void as void }` leads to exporting duplicate identifiers

Aperta
#62,081 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Bug Domain: Declaration Emit Help Wanted
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

🔎 Search Terms

export void export reserved export null

🕗 Version & Regression Information
  • Reproducible since typescript v4. In older releases, it doesn't export anything. I also tried the latest dev release (5.9.0-dev.20250716)
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about exports
⏯ Playground Link

Playground (important: lang:javascript)

💻 Code

Using the following tsconfig.json:

{
  "compilerOptions": {
    "target": "esnext",
    "lib": ["esnext"],
    "module": "esnext",
    "allowJs": true,
    "checkJs": true,
    "declaration": true,
    "declarationMap": true,
    "outDir": "./dist",
    "emitDeclarationOnly": true,
    "strict": true,
    "noImplicitAny": true,
    "moduleResolution": "bundler"
  }
}

I compile declaration files for this code ${project}/schema.js (only happens when compiling javascript):

const _null = {}
const $void = {}

export { _null as null, $void as void }
🙁 Actual behavior

The produced declaration file schema.d.ts is erroneous. It has duplicate identifiers:

declare const _null: {};
declare const $void: {};
export { _null as null, _null as null, $void as void, _void as void };
🙂 Expected behavior

No duplicate identifiers:

declare const _null: {};
declare const $void: {};
export { _null as null, $void as void };
Additional information about the issue

For any reserved keyword, tsc always exports _{reserved} as {reserved}, whenever {reserved} is exported. Even though the variable _{reserved} does not exist.

It is only reproducible when compiling javascript.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia con il tsconfig.json fornito e la riproduzione di schema.js, quindi esamina l'emissione delle sole dichiarazioni JavaScript per l'elenco degli export. Confronta lo schema.d.ts generato con le istruzioni di export previste; il lavoro è completato quando gli export di parole chiave riservate compaiono una sola volta e non vengono emessi identificatori inesistenti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript, typescript
Ambito
compilers
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.