microsoft / microsoft/TypeScript

Duplicate function declarations in generated `.d.ts` for non-module JS files with `allowJs` + `declaration`

Offen
#63,546 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Domain: Declaration Emit
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

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 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

Neue Issues direkt in Ihr Postfach

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