microsoft / microsoft/TypeScript
Polymorphic `this` breaks when a module exports a variable and interface with the same name
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
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.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par reproduire le problème avec la déclaration sequelize fournie et en important Model avec la syntaxe d’importation nommée. Suivez la manière dont le compilateur résout la variable exportée et l’interface portant le même nom lors de la vérification de this polymorphe. Le travail est terminé lorsque l’exemple infère Model et autorise l’appel chaîné sans nécessiter la solution de contournement par importation de namespace.
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é
- Plutôt claire
- Accessibilité débutants
- 35/100