infer digunakake ing sajero conditional type kanggo capture (extract) type saka ing njaba tipe liya menyang type variable anyar sing bisa digunakake. Iku pattern-matching kanggo types.
<T> = T (infer U)[] ? U : ;
A = <[]>;
B = <[]>;
Bacanen: "yen T cocok karo pattern U[], bind U menyang apa dene element type, lan return." infer U ndeklarasikake placeholder sing compiler isi kanthi pattern matching.
// the resolved type of a Promise
type Awaited2<T> = T extends Promise<infer R> ? R : T;
type R = Awaited2<Promise<User>>; // User
// a function's return type (this is how ReturnType is built)
type MyReturn<T> = T extends (...args: any[]) => infer R ? R : never;
type X = MyReturn<() => number>; // number
// a function's first parameter
type FirstArg<T> = T extends (a: infer A, ...rest: any[]) => any ? A : never;
type UnwrapBoth<T> =
T extends Promise<infer U> ? UnwrapBoth<U> : // recurse to unwrap nested promises
T extends (infer E)[] ? E : T;
Kowe bisa nggunakake pirang-pirang infer ing siji pattern lan malah recurse.
infer iku engine ing mburine type built-in kaya ReturnType, Parameters, Awaited, lan InstanceType, lan ing mburine library magic sing derive response types saka fetchers utawa props saka components.
Iku ngidini type code "buka" complex type lan narik metu inner pieces — tool paling kuat kanggo nulis types sing adapt menyang types liya.