microsoft / microsoft/TypeScript
Cannot override method in subclass when superclass instance type is a mapped type
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
TypeScript Version: 3.1.1
Search Terms:
defines instance member property
Code
class A {
foo(): void {};
bar: number;
}
class B extends (A as { new(): Pick<A, Exclude<keyof A, "foo">> & Pick<A, "foo"> }) {
// (1)
foo(): void {
super.foo();
}
baz: number;
}
Expected behavior:
Compiles successfully
Actual behavior:
Error at (1): [ts] Class 'Pick<A, "bar"> & Pick<A, "foo">' defines instance member property 'foo',
but extended class 'B' defines it as instance member function.
A more realistic example of this is when using https://github.com/bterlson/strict-event-emitter-types along with subclassing a superclass with overridable methods:
import StrictEventEmitter from "strict-event-emitter-types";
import * as inspector from "inspector";
interface SessionEvents {
"Runtime.executionContextCreated": (message: inspector.InspectorNotification<Runtime.ExecutionContextCreatedEventDataType>) => void
}
type StrictSession = StrictEventEmitter<inspector.Session, SessionEvents>;
class CustomSession extends (inspector.Session as { new (): StrictSession }) {
connect() { // error here
super.connect();
}
}
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 l’exemple de code TypeScript et le lien Playground pour reproduire le diagnostic impliquant Pick, Exclude et la redéfinition de la sous-classe. Suivez la manière dont le compilateur compare le membre de la superclasse mappée avec B.foo, puis ajoutez une couverture pour l’exemple et confirmez que la redéfinition valide est compilée sans erreur.
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