microsoft / microsoft/TypeScript

symbolToName does handle exports of namespaces

Ouverte
#29,459 1 commentaire 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Bug Domain: Declaration Emit
Langage dominant
Go
Étoiles
111k
Forks
14.4k
Merge moyen
1 j 19 h
PR mergées (30 j)
117

Description

TypeScript Version: 3.2.2

Search Terms: symbolToName, exports, declaration, .d.ts

TypeScript cannot emit the name for a symbol that's declared in an inner namespace but re-exported in the outer namespace. That is, emitting the type name of a symbol does not take an alias created by an export {x as y} statement into account.

This comes up when trying to use the chrome.debugger declaration file. Because debugger is a reserved keyword, the .d.ts is defined using a fake, unexported inner namespace called _debugger, and re-exports it using export {_debugger as debugger};. TypeScript then cannot produce .d.ts files when trying to generate the name for a symbol.

Code

// decl.d.ts
declare module chrome {
  namespace _debugger {
    export class Foo {}
  }
  export function getFoo(): debugger.Foo;
  export {_debugger as debugger};
}

// user.ts
export const x = chrome.getFoo();

Run tsc --declaration.

Expected behavior:

// user.d.ts
export declare const x: chrome.debugger.Foo;

Actual behavior:

test.ts:1:14 - error TS4025: Exported variable 'x' has or is using private name '_debugger.Foo'.

1 export const x = chrome.getFoo();
               ~

Playground Link: n/a

Related Issues:

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Reproduisez le problème avec decl.d.ts et user.ts en exécutant tsc --declaration, puis suivez le traitement de symbolToName par le compilateur pour l’espace de noms _debugger réexporté. Comparez la déclaration générée avec le nom attendu chrome.debugger.Foo et utilisez, si elles sont disponibles, les tests existants du compilateur autour de l’émission de déclarations pour vérifier le fix.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
typescript
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.