microsoft / microsoft/TypeScript
Static method on abstract class with generic this parameter causes "excessively deep" error when called on concrete class
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
🔎 Search Terms
- abstract class
- static method
- this parameter
- excessively deep
- concrete class
- generic
🕗 Version & Regression Information
This is broken in 5.6, 5.7, and nightly at least.
⏯ Playground Link
💻 Code
abstract class AbstractClass<D> {
get data(): D {
return {} as unknown as D
}
static xyz<T extends typeof AbstractClass<any>>(
this: T,
data: T extends typeof AbstractClass<infer D> ? D : never
) {}
}
class ConcreteClass extends AbstractClass<string> {
}
ConcreteClass.xyz(123)
🙁 Actual behavior
The ConcreteClass.xyz results in Type instantiation is excessively deep and possibly infinite. and as a result infers D as never.
🙂 Expected behavior
This to work fine. A similar case, but where InstanceType<T> extends AbstractClass<infer D> ? D : never works fine: https://www.typescriptlang.org/play/?target=99&ts=5.8.0-dev.20250117#code/IYIwzgLgTsDGEAJYBthjAgguacIGFV0AeAEQD4EBvAKAXoQHMBTRAE2AmAAoBKALgSlqdBmKisArlAB21AL4I0CSTIDWMgPYB3OctKj68moYSROAS1gIAHgE8AXsQAqCZjYjMZbDBDsAHZk0AMywcGHhCNDBiYBk7cnJuUzEIAAsLMEFnABoUhg4uQQBJGXMZWGZnAOYXSndPbwxsSAiCIhiLGWDmKCFKAH4hBEEZZgA3XtNeBRpjGhRohHxNColPKPQ3Dy8fMNa8TZjWrsZKWjmTFbXWZiOAOnsHbgBGACYAZl4gA
Additional information about the issue
No response
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
Beginne damit, die bereitgestellte TypeScript Playground-Reproduktion auszuführen und sie mit der funktionierenden InstanceType-Variante zu vergleichen. Verfolge, wie der Compiler den statischen this-Parameter und die Inferenz bedingter Typen verarbeitet; abgeschlossen ist die Aufgabe, wenn ConcreteClass.xyz keinen Fehler wegen einer zu tiefen Instanziierung mehr meldet und den beabsichtigten Typ ableitet.
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