0Pricing
TypeScript Academy · Lezione

Tipi condizionali distributivi

Comprenda come i tipi condizionali si distribuiscono sui membri di un'unione.

Tipi condizionali distributivi è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 4 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.

Benvenuto

I tipi condizionali distributivi applicano un tipo condizionale separatamente a ogni membro di un'unione. Questo comportamento potente consente la trasformazione e il filtraggio delle unioni.

Che cos'è la distribuzione

Quando un tipo condizionale contiene un T generico semplice e T è un'unione, TypeScript applica la condizione separatamente a ogni membro dell'unione.
type Wrap<T> = T extends any ? { value: T } : never;
type R = Wrap<string | number>;
// = { value: string } | { value: number }

La condizione fondamentale

La distribuzione avviene solo quando T è un parametro di tipo generico semplice, non racchiuso. Racchiudere T in una tupla la impedisce.
type Bare<T> = T extends string ? 'yes' : 'no';
type Wrapped<T> = [T] extends [string] ? 'yes' : 'no';
type B = Bare<'a' | 'b'>; // 'yes' | 'yes' = 'yes'
type W = Wrapped<'a' | 'b'>; // 'no' — treated as a tuple

Filtrare le unioni con never

La restituzione di never dal ramo false filtra i membri dell'unione.
type StringsOnly<T> = T extends string ? T : never;
type S = StringsOnly<string | number | boolean>; // string

Built-in Extract

Extract è implementato con un condizionale distributivo che mantiene i membri assegnabili a U.
type Extract<T, U> = T extends U ? T : never;
type E = Extract<string | number | boolean, string | number>; // string | number

Built-in Exclude

Exclude rimuove i membri dell'unione assegnabili a U.
type Exclude<T, U> = T extends U ? never : T;
type Ex = Exclude<string | number | boolean, boolean>; // string | number

Distribuzione di ToArray

Applichi ToArray separatamente a ogni membro dell'unione tramite la distribuzione.
type ToArray<T> = T extends any ? T[] : never;
type R = ToArray<string | number>; // string[] | number[]

Caso d'uso per impedire la distribuzione

A volte è necessario trattare l'intera unione come un singolo argomento di tipo, senza distribuirla.
type IsUnion<T> = [T] extends [T] ? [T] extends [Exclude<T, T>] ? false : true : false;

Tipi mappati distributivi

Combini i condizionali distributivi con i tipi mappati per trasformare selettivamente le proprietà.
type PickByValue<T, V> = {
  [K in keyof T as T[K] extends V ? K : never]: T[K]
};

Condizionale distributivo in ReturnType

Il comportamento distributivo fa sì che ReturnType funzioni correttamente quando T è un'unione di tipi funzione.
type Fn = (() => string) | (() => number);
type R = ReturnType<Fn>; // string | number

Distribuzione eager e lazy

TypeScript rimanda la valutazione dei tipi condizionali con parametri di tipo liberi finché questi non vengono risolti: si tratta di una valutazione lazy.

Verifica rapida

Che cos'è `type R = (string | number) extends string ? 'yes' : 'no'` quando T NON è un generico semplice?

Riepilogo

I tipi condizionali distributivi vengono applicati separatamente a ogni membro dell'unione quando T è un parametro generico semplice. Questo comportamento è alla base di Extract, Exclude e del filtraggio personalizzato delle unioni. Li racchiuda in una tupla per impedire la distribuzione.

Domande Frequenti

La lezione «Tipi condizionali distributivi» è gratuita?

Sì — il testo completo di «Tipi condizionali distributivi» è 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 «Tipi condizionali distributivi»?

Comprenda come i tipi condizionali si distribuiscono sui membri di un'unione. 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 4 di 4.

Quanto tempo richiede la lezione «Tipi condizionali distributivi»?

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

  1. keyof e tipi di accesso indicizzato
  2. Vincoli dei generics: restringere i parametri di tipo
  3. Tipi condizionali: T extends U ? X : Y
  4. Tipi condizionali distributivi
← Torna a TypeScript Academy