microsoft / microsoft/TypeScript
Allow use of `infer` in the type parameter of a type declaration
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.4k
- Merge medio
- 1g 19h
- PR unite (30g)
- 117
Descrizione
Suggestion
For many type declarations, it shouldn't be necessary to use a conditional type which repeats a constraint already found in type parameter.
For example, instead of:
type ConstructorParameters<T extends abstract new (...args: any ) => any> =
T extends abstract new (...args: infer P) => any ? P : never;
This would be better expressed as:
type ConstructorParameters<T extends abstract new (...args: infer P) => any> = P;
🔍 Search Terms
infer type parameter conditional type type declaration
✅ Viability Checklist
My suggestion meets these guidelines:
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
- This feature would agree with the rest of TypeScript's Design Goals.
⭐ Suggestion
See above
📃 Motivating Example
TypeScript's own built-in types have other examples where constraints are repeated in both a type parameter and conditional type. I've also seen cases where developers just don't want to repeat constraints, so they define:
type RecordValueType<T> =
T extends Record<any, infer V> ? V : never;
And then incorrect usage results in a type of never, rather than an error.
💻 Use Cases
- Improved readability
- Less repetition when authoring type declarations
- Less frustration when consuming lazily-declared types
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 dagli esempi motivanti e dalla sintassi infer proposta nell’issue, quindi esamina come TypeScript gestisce attualmente i vincoli dei parametri di tipo e i tipi condizionali. Il lavoro è completato quando le dichiarazioni di tipo possono inferire un parametro di tipo direttamente dal relativo vincolo senza ripetere un tipo condizionale, mantenendo il comportamento indicato in termini di leggibilità e convalida.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100