microsoft / microsoft/TypeScript
Duplicate function declarations in generated `.d.ts` for non-module JS files with `allowJs` + `declaration`
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 132
Descripción
### 🔎 Search Terms
allowJs declaration duplicate, allowJs declaration emit multiple files global function, declaration emit global scope merged symbol resolveAnonymousTypeMembers, script file declaration emit duplicates
### 🕗 Version & Regression Information
This is the behavior in every version I tried, including 6.0.3 (also tested typescript@next)
Playground Link: requires multi-file setup with tsconfig.json.
I used stackblitz instead.
### ⏯ Playground Link
https://stackblitz.com/edit/node-emxsybj1?file=tsconfig.json
### 💻 Code
**tsconfig.json**
```json
{
"compilerOptions": {
"allowJs": true,
"declaration": true,
"emitDeclarationOnly": true
},
"include": ["*.js"]
}
```
**a.js**
```js
/** @filename: a.js */
function func(x) {
return x + 1;
}
```
**b.js**
```js
/** @filename: b.js */
function func(x) {
return x + 2;
}
```
### 🙁 Actual behavior
**a.d.ts** and **b.d.ts** each contain the function declaration twice (once from each file).
**a.d.ts**
```ts
/** @filename: a.js */
declare function func(x: any): any;
declare function func(x: any): any;
```
**b.d.ts**
```ts
declare function func(x: any): any;
/** @filename: b.js */
declare function func(x: any): any;
```
### 🙂 Expected behavior
Each **.d.ts** should only contain the declaration from its own source file or error (not sure).
### Additional information about the issue
related issues:
- #27011
- #49200
**EDIT1:** updated _Expected behavior_
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza ejecutando tsc con el tsconfig.json indicado y la reproducción de dos archivos a.js/b.js; después, sigue la emisión de declaraciones para los símbolos globales y la ruta resolveAnonymousTypeMembers mencionada en los términos de búsqueda. Compara la salida con las issues #27011 y #49200. Se considera completado cuando cada .d.ts generado contiene únicamente su propia declaración, o el compilador informa de un error claro si ese comportamiento no es válido.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, typescript
- Área
- compilers
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 48/100