infer conditional type भित्र प्रयोग गरिन्छ अरू प्रकारबाट एक प्रकार कब्जा (निकाल) गर्न नयाँ प्रकार चर मा जो तपाईले पछि प्रयोग गर्न सक्नुहुन्छ। यो प्रकारहरूको लागि pattern-matching हो।
<T> = T (infer U)[] ? U : ;
A = <[]>;
B = <[]>;
यसलाई यसरी पढ्नुहोस्: "यदि T ले U[] नमुना मिलायो भने, U लाई element type मा बाँध, र फर्काउनुहोस्।" infer U ले placeholder घोषणा गर्छ जो compiler ले 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;
तपाई एक नमुनामा धेरै infer प्रयोग गर्न सक्नुहुन्छ र पनि पुनरावर्ती गर्न सक्नुहुन्छ।
infer ReturnType, Parameters, Awaited, र InstanceType जस्ता निर्मित-मा प्रकारहरूको पछाडिको इन्जिन हो, र library magic पछाडिको जो fetchers वा components बाट props मा प्रतिक्रिया प्रकार प्राप्त गर्छ।
यसले प्रकार कोडलाई एक जटिल प्रकार "खोल्न" र आन्तरिक टुक्रा निकाल्न दिन्छ — अरू प्रकारहरूमा अनुकूल हुने प्रकार लेखनको लागि सबैभन्दा शक्तिशाली उपकरण।