microsoft / microsoft/TypeScript
Polymorphic `this` breaks when a module exports a variable and interface with the same name
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
Importing a variable that has a corresponding interface of the same name from a module causes unexpected behavior.
In the screenshot below, the function, doSomething, should return the type Model<number> due to polymorphic this; however, it returns Model<T>, which is unusable.
Here is an easy way to reproduce this behavior:
npm install -g @types/sequelize sequelize- Replace
node_modules/@types/sequelize/index.d.tswith the following
declare namespace sequelize {
interface Model<T> {
doSomething(arg: T): this;
}
}
declare var sequelize: { Model: sequelize.Model<any> };
export = sequelize;
- create a file with the following contents:
import { Model } from 'sequelize';
let a: Model<number> = null as any;
a.doSomething(5).doSomething();
Workaround:
Use import * as ... syntax and the names will resolve correctly.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Empieza reproduciendo el problema con la declaración de sequelize proporcionada e importando Model con sintaxis de importación con nombre. Traza cómo el compilador resuelve la variable exportada y la interfaz con el mismo nombre al comprobar this polimórfico. Se considera terminado cuando el ejemplo infiere Model y permite la llamada encadenada sin requerir la solución alternativa de importación de namespace.
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
- Bastante claro
- Aptitud para principiantes
- 35/100