microsoft / microsoft/TypeScript
Static method on abstract class with generic this parameter causes "excessively deep" error when called on concrete class
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 1g 19h
- PR unite (30g)
- 117
Descrizione
🔎 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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia eseguendo la riproduzione fornita in TypeScript Playground e confrontala con la variante funzionante di InstanceType. Traccia il modo in cui il compilatore gestisce il parametro this statico e l’inferenza dei tipi condizionali; il lavoro è completo quando ConcreteClass.xyz non segnala più un errore di istanziazione eccessivamente profonda e inferisce il tipo previsto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100