infer linatumika ndani ya conditional type ili kukamata (kutoa) aina kati ya aina nyingine katika variable ya aina mpya unayoweza kuitumia. Ni pattern-matching kwa aina.
<T> = T (infer U)[] ? U : ;
A = <[]>;
B = <[]>;
Someni kama: "ikiwa T inatoshea mfumo U[], funga U kwa chochote aina ya kipengele ni, na irudishe." infer U inajumlisha nafasi aliyozaa kumbikaji inakamilisha kwa kulinganisha.
// 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;
Unaweza kutumia infers kadhaa katika muundo mmoja na hata kujirudia.
infer ni injini nyuma ya aina zinazobanwa kama ReturnType, Parameters, Awaited, na InstanceType, na nyuma ya maajabu ya maktaba ambayo inatokeza aina za majibu kutoka kwa waletaji au props kutoka kwa sehemu.
Inaruhusu code ya aina "kufungua" aina ngumu na kutoa sehemu za ndani — chombo chenye nguvu zaidi cha kuandika aina zinazolingana na aina nyingine.