microsoft / microsoft/TypeScript
Generic constraint is not validated in a recursive type
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
Bug Report
🕗 Version & Regression Information
- This is the behavior in every version I tried, starting from 4.1 where recursive conditional types were added
⏯ Playground Link
Playground link with relevant code
💻 Code
export type ComputeRangeLoose<
N extends number,
Result extends Array<number> = [],
> = Result['length'] extends N ? Result : ComputeRangeLoose<N, [...Result, Result['length']]>
type A = ComputeRangeLoose<{ foo: true }>
export type ComputeRangeStrict<
N extends number,
Result extends Array<number> = [],
> = N extends number
? Result['length'] extends N ? Result : ComputeRangeStrict<N, [...Result, Result['length']]>
: never
type B = ComputeRangeStrict<{ foo: true }>
🙁 Actual behavior
ComputeRangeLoose<{ foo: true }> allows to pass a type that is not related to number, throwing Type instantiation is excessively deep and possibly infinite.
ComputeRangeStrict<{ foo: true }> throws an expected Type '{ foo: true; }' does not satisfy the constraint 'number'
🙂 Expected behavior
Both ComputeRangeLoose and ComputeRangeStrict throw Type '{ foo: true; }' does not satisfy the constraint 'number'
As the issue is reproducible since 4.1, I'm pretty sure it was already mentioned somewhere however I failed to find a suitable issue
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, das Problem im verlinkten TypeScript Playground anhand der Beispiele ComputeRangeLoose und ComputeRangeStrict zu reproduzieren. Verfolge die Prüfung generischer Constraints für rekursive bedingte Typen und überprüfe, dass beide ungültigen Instanziierungen die erwartete Constraint-Diagnose statt einer übermäßigen Instanziierungstiefe melden.
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