Comprendere infer nei tipi condizionali
Estragga i tipi interni utilizzando infer nelle clausole extends.
Comprendere infer nei tipi condizionali è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 4 lezioni in totale.
Che cos'è infer?
La parola chiave infer compare nei tipi condizionali e consente a TypeScript di acquisire una variabile di tipo dalla posizione corrispondente, così da poterla utilizzare nel ramo vero.
type GetReturn<T> = T extends (...args: any[]) => infer R ? R : never;Esempio di base con infer
Qui estraiamo il tipo restituito da qualsiasi funzione utilizzando infer R.
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type A = ReturnType<() => string>; // string
type B = ReturnType<() => number[]>; // number[]Come funziona infer
TypeScript confronta la struttura di T con il pattern. Se corrispondono, la variabile inferita contiene la parte corrispondente. In caso contrario, viene scelto il ramo falso.
type First<T> = T extends [infer F, ...any[]] ? F : never;
type X = First<[string, number, boolean]>; // stringInferenza dai parametri generici
È possibile inferire l'argomento di tipo di un tipo generico, ad esempio estraendo T da Promise.
type Unwrap<T> = T extends Promise<infer U> ? U : T;
type A = Unwrap<Promise<string>>; // string
type B = Unwrap<number>; // numberPiù variabili infer
È possibile utilizzare più clausole infer in un singolo tipo condizionale per acquisire contemporaneamente diverse posizioni.
type Head<T> = T extends [infer H, ...infer Tail] ? H : never;
type Tail<T> = T extends [infer H, ...infer Tail] ? Tail : never;infer nei parametri delle funzioni
infer può acquisire anche i tipi dei parametri di una funzione, non solo i tipi restituiti.
type FirstParam<T> = T extends (first: infer P, ...rest: any[]) => any ? P : never;
type A = FirstParam<(x: string, y: number) => void>; // stringComportamento distributivo con infer
Quando T è un'unione, i tipi condizionali, inclusi quelli con infer, vengono distribuiti su ciascun membro dell'unione.
type UnwrapAll<T> = T extends Promise<infer U> ? U : T;
type X = UnwrapAll<Promise<string> | Promise<number>>;
// string | numberinfer annidato
È possibile annidare infer per accedere a livelli più profondi di una struttura di tipi, ad esempio estraendo il tipo del valore di un array contenuto in una promise.
type UnwrapPromiseArray<T> =
T extends Promise<infer U>
? U extends (infer V)[]
? V
: U
: T;infer con pattern di stringhe
I tipi literal di template combinati con infer consentono di estrarre sottostringhe dai tipi literal di stringa.
type GetDomain<T extends string> =
T extends `https://${infer Domain}` ? Domain : never;
type D = GetDomain<"https://example.com">; // "example.com"Errori comuni
Infer funziona solo all'interno della clausola extends di un tipo condizionale. Utilizzarlo altrove causa un errore di compilazione. Inoltre, infer non è disponibile nel ramo falso.
// Error: infer can only appear in extends clauses
type Bad<T> = infer R; // SyntaxErrorRiepilogo: infer
La parola chiave infer consente a TypeScript di acquisire un frammento di tipo da una corrispondenza strutturale in un tipo condizionale. È alla base di utility type come ReturnType, Parameters e Awaited.
Verifica rapida
Dove è possibile utilizzare la parola chiave infer?
Cosa ha imparato
La parola chiave infer abilita la corrispondenza di pattern a livello di tipo, estraendo frammenti di tipo da pattern strutturali. È alla base di potenti utility type e della metaprogrammazione con sicurezza dei tipi in TypeScript.
Domande Frequenti
La lezione «Comprendere infer nei tipi condizionali» è gratuita?
Sì — il testo completo di «Comprendere infer nei tipi condizionali» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 4 lezioni in totale.
Cosa imparerò in «Comprendere infer nei tipi condizionali»?
Estragga i tipi interni utilizzando infer nelle clausole extends. Eserciti TypeScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare TypeScript Academy?
Non è richiesta alcuna esperienza precedente. TypeScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Comprendere infer nei tipi condizionali»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione TypeScript Academy?
Sì. Ogni lezione TypeScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Comprendere infer nei tipi condizionali
- Creazione da zero di ReturnType e Parameters
- Pattern di inferenza profondamente annidati
- Casi d'uso pratici di infer: rimozione dei wrapper Promise