microsoft / microsoft/TypeScript

symbolToName does handle exports of namespaces

Abierto
#29,459 1 comentario 2 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Bug Domain: Declaration Emit
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
1 d 19 h
PR fusionados (30 d)
117

Descripción

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:

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Reproduce el problema con decl.d.ts y user.ts ejecutando tsc --declaration; después, rastrea cómo el compilador gestiona symbolToName para el espacio de nombres _debugger reexportado. Compara la declaración generada con el nombre esperado chrome.debugger.Foo y usa las pruebas existentes del compilador relacionadas con la emisión de declaraciones, si están disponibles, para verificar el fix.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.