microsoft / microsoft/TypeScript

@ts-ignore on an import that gets redefined strips the import from output

Abierto
#37,047 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

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

Descripción

TypeScript Version: 3.7.5 and 3.8.0

Search Terms:

  • ts-ignore remove import
  • ts-ignore strip import

Code

// @ts-ignore: Local Foo override
import Foo from "foo";

declare const Foo: {
    bar(): number;
}

Foo.bar();

Expected behavior:

JS output should probably be:

import Foo from "foo";

Foo.bar();

Actual behavior:

JS output is:

Foo.bar();

Playground Link: https://www.typescriptlang.org/play/index.html?ts=3.8-Beta&ssl=9&ssc=1&pln=1&pc=1#code/PTAEAEBcGcFoEsDmA7A9gJwKYC5QBlUBjAQwBtQAxVVUVAN03XXgBNMAoeAWwAcNJK1UADN0qLqABEw6pIDc7dm0KliWUIVTJoAqqlwBvdqBOgARmoAUASlzIArlzOMFAX0V6AdBfQ2FQA

Related Issues: None so far


Additional remarks: We are aware of other ways to type the foo module but in this particular case the foo override needs to be done in the file using it. As far as we tried, adding a ts-ignore is the only way to make ts understand that we want to redefine the module.
Now, this seems to move the declaration site from the import to the the declare statement and that has the effect to mark the import site as unused, since the import is unused, ts strips it.

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 comportamiento del código TypeScript 3.7.5/3.8.0 proporcionado y del enlace al Playground, y luego rastrea la decisión del compilador sobre la eliminación de imports para un import seguido de una redeclaración. Se considera terminado cuando el JavaScript emitido conserva el import tal como se muestra en la salida esperada y este caso cuenta con cobertura de pruebas.

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
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.