microsoft / microsoft/TypeScript
Unable to infer parameters for generic constructor/functions with a distributive conditional type
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 2g 4h
- PR unite (30g)
- 132
Descrizione
🔎 Search Terms
generic constructor, generic function, branded string, ConstructorParameters, Parameters, unable to infer.
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ
⏯ Playground Link
💻 Code
export {};
interface _Map {
foo: { a: 123 }
}
type ModuleSubType = "bar" & { brand: true };
type Map = _Map & Record<ModuleSubType, { blah: string }>
type SubTypeGet<
SubType extends string,
Map extends Record<SubType, unknown>,
> = SubType extends unknown
? { type?: SubType } & Map[SubType]
: never;
// This is the most straightforward way I can figure out to come to this issue:
type TestParameters = Parameters<<T extends "foo" | ModuleSubType>(arg: SubTypeGet<T, Map>) => void>
// ^? never
// I originally encountered it with a class like this:
declare class Test<T extends "foo" | ModuleSubType> {
constructor(arg: SubTypeGet<T, Map>);
}
type TestConstructorParameters = ConstructorParameters<typeof Test>;
// ^? never
🙁 Actual behavior
Parameters fails to infer anything.
🙂 Expected behavior
Parameters should infer something, probably [arg: { type?: ModuleSubType | undefined; } | ({ type?: "foo" | undefined; } & { a: 123; })] as it would if the function/class were instantiated.
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
Usa la riproduzione collegata di Playground come primo punto di ingresso; esamina come i tipi condizionali distributivi passano attraverso Parameters e ConstructorParameters negli esempi di funzione generica e costruttore. Il lavoro è completato quando entrambe le utility inferiscono una tupla di parametri diversa da never, coerente con il comportamento previsto, e la riproduzione esistente non fallisce più.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100