microsoft / microsoft/TypeScript

Overriding generic method inconsistently errors

Offen
#26,631 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Domain: check: Variance Relationships Help Wanted
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

TypeScript Version: 3.1.0-dev.201xxxxx

Search Terms: override generic

Code

interface Foo {
    method<T>(): T;
}

// Error: Interface 'Bar<T>' incorrectly extends interface 'Foo'.
interface Bar<T extends Node> extends Foo {
    method<T2 extends T>(): T2;
}

// Uncommenting this suddenly fixes the error
// interface Foo {
//     method<T>(): T;
// }

Full error message:

Interface 'Bar<T>' incorrectly extends interface 'Foo'.
  Types of property 'method' are incompatible.
    Type '<T2 extends T>() => T2' is not assignable to type '<T>() => T'.
      Type 'T' is not assignable to type 'T'. Two different types with this name exist, but they are unrelated.
        Type 'Node' is not assignable to type 'T'.

Expected behavior: The error should always appear, or always not appear.

Actual behavior: A partial interface mysteriously removes the error

Playground Link: https://www.typescriptlang.org/play/#src=interface%20Foo%20%7B%0D%0A%20%20%20%20method%3CT%3E()%3A%20T%3B%0D%0A%7D%0D%0A%0D%0Ainterface%20Bar%3CT%20extends%20Node%3E%20extends%20Foo%20%7B%0D%0A%20%20%20%20method%3CT2%20extends%20T%3E()%3A%20T2%3B%0D%0A%7D%0D%0A%0D%0A%2F%2F%20Uncommenting%20this%20suddenly%20fixes%20the%20error%0D%0A%2F%2F%20interface%20Foo%20%7B%0D%0A%2F%2F%20%20%20%20%20method%3CT%3E()%3A%20T%3B%0D%0A%2F%2F%20%7D

Related Issues: #23960

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere das Beispiel aus dem Playground-Link in TypeScript 3.1.0-dev.201xxxxx und vergleiche es anschließend mit und ohne die wiederholte Foo-Deklaration. Lies zur Einordnung das zugehörige Issue #23960; die Arbeit ist abgeschlossen, wenn die generische Überschreibung die Inkompatibilität entweder konsistent meldet oder sie konsistent akzeptiert.

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
Muss geklärt werden
Anfängerfreundlichkeit
30/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.