infer jintużaw ġewwa conditional type biex taqbad (testratt) tip minn ġewwa tip ieħor f'varjabbli tip ġdid li tista' mbagħad tuża. Din hija pattern-matching għat-tipijiet.
ts
<T> = T (infer U)[] ? U : ;
A = <[]>;
B = <[]>;
Iqraha bħala: "jekk T jaqbel mal-pattern U[], irabetat U mal-element type, u irkeb." infer U tiddikjara placeholder li l-compiler timla bl-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;
Tista' tuża diversi infer f'pattern wieħed u saħansba trekurri.
infer hija l-magna waħ il-ktajjen built-in bħal ReturnType, Parameters, Awaited, u InstanceType, u waħ il-magic tal-librerija li tiderġa response types minn fetchers jew props minn components.
It-tella' lill-kodiċi tat-tip "jiftaħ" tip kumplies u jieħu l-qatgħat interni — l-aktar għodda qawwija għat-tiktib tat-tipijiet li jadattaw ma' tipijiet oħra.