microsoft / microsoft/TypeScript
Non-exported recursive type alias is inlined until it falls back to any in declarations
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
🔎 Search Terms
declarations recursive types
🕗 Version & Regression Information
- This is the behavior in every version I tried (before 4.4 it was either a stack overflow crash or an error on the recursive type)
⏯ Playground Link
💻 Code
// @declaration: true
// @filename: utils.ts
type Recursive<T> = T extends Array<infer V>? Recursive<V>: T;
export const f = <T>(): Recursive<T> => { return null! }
// @filename: index.ts
import { f } from './utils';
export const a = f;
🙁 Actual behavior
In declarations, the type for a is printed as a: () => T extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? V extends (infer V)[] ? any : V : V : V : V : V : V : V : V : V : V : T;
🙂 Expected behavior
Recursive can't be represented without falling back to any (as seen above) so it should just be an error instead of silently to any
Additional information about the issue
Related to #55832
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
Reproduziere die Deklarationsausgabe aus dem Playground-Link mit utils.ts und index.ts und konzentriere dich dabei auf die exportierte generische Funktion und die Deklaration für a. Verfolge, wie der nicht exportierte Recursive-Alias dargestellt wird, wenn Deklarationen ausgegeben werden. Fertig ist die Aufgabe, wenn dieser Fall einen Fehler meldet, statt stillschweigend einen tief expandierten Typ zu erzeugen, der auf any zurückfällt.
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
- 42/100