microsoft / microsoft/TypeScript
Cannot override method in subclass when superclass instance type is a mapped type
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
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();
}
}
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie mit dem TypeScript-Codebeispiel und dem Playground-Link, um die Diagnose mit Pick, Exclude und der Überschreibung in der Unterklasse zu reproduzieren. Verfolgen Sie, wie der Compiler das Member der gemappten Oberklasse mit B.foo vergleicht, fügen Sie dann eine Abdeckung für das Beispiel hinzu und bestätigen Sie, dass die gültige Überschreibung ohne Fehler kompiliert wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100