microsoft / microsoft/TypeScript
Duplicate function declarations in generated `.d.ts` for non-module JS files with `allowJs` + `declaration`
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
### 🔎 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_
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, tsc mit der angegebenen tsconfig.json und der Reproduktion mit den zwei Dateien a.js/b.js auszuführen, und verfolge dann die Ausgabe von Deklarationen für globale Symbole sowie den in den Suchbegriffen erwähnten Pfad resolveAnonymousTypeMembers. Vergleiche die Ausgabe mit den Issues #27011 und #49200. Als erledigt gilt die Aufgabe, wenn jede generierte .d.ts nur ihre eigene Deklaration enthält oder der Compiler einen eindeutigen Fehler meldet, falls dieses Verhalten ungültig ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- javascript, typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100