microsoft / microsoft/TypeScript
`export { _void as void }` leads to exporting duplicate identifiers
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Go
- Estrelas
- 111k
- Forks
- 14.3k
- Merge médio
- 2d 4h
- PRs com merge (30d)
- 132
Descrição
### 🔎 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)](https://www.typescriptlang.org/play/?target=99&jsx=0&filetype=js#code/FAUwHgDg9gTgLgAgMZQHYGdEH0BuUCWAJggLwIDeAvsKJLIuQrgcQIboJ5EKUI1A)
### 💻 Code
Using the following `tsconfig.json`:
```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):
```ts
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:
```ts
declare const _null: {};
declare const $void: {};
export { _null as null, _null as null, $void as void, _void as void };
```
### 🙂 Expected behavior
No duplicate identifiers:
```ts
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.
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece com o tsconfig.json fornecido e a reprodução de schema.js; em seguida, inspecione a emissão somente de declarações do JavaScript para a lista de exports. Compare o schema.d.ts gerado com as instruções de export esperadas; considera-se concluído quando os exports de palavras-chave reservadas aparecem uma única vez e nenhum identificador inexistente é emitido.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- javascript, typescript
- Domínio
- compilers
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 45/100