Tipi condizionali e mappati in React
Costruisca tipi per le props dei componenti che cambiano forma in base ai valori di altre props, utilizzando i tipi condizionali.
Tipi condizionali e mappati in React è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 2 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 React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
Basi dei tipi condizionali
Un tipo condizionale usa la sintassi T extends U ? X : Y: se T è assegnabile a U, il tipo si risolve in X; altrimenti in Y.
type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // false
type C = IsString<'hello'>; // trueProps condizionali basate su altre props
Utilizzi i tipi condizionali per rendere una prop obbligatoria o opzionale in base al valore di un'altra prop.
type InputProps<T extends 'text' | 'number'> = {
type: T;
} & (T extends 'number' ? { min?: number; max?: number } : { maxLength?: number });
const numInput: InputProps<'number'> = { type: 'number', min: 0, max: 100 };
const txtInput: InputProps<'text'> = { type: 'text', maxLength: 50 };Tipi mappati
I tipi mappati creano un nuovo tipo trasformando ogni proprietà di un tipo esistente. La sintassi in keyof itera su tutte le chiavi.
type Optional<T> = { [K in keyof T]?: T[K] };
type Readonly<T> = { readonly [K in keyof T]: T[K] };
type Nullable<T> = { [K in keyof T]: T[K] | null };Rendere opzionali le props nei moduli di aggiornamento
Utilizzi Partial<T>, un tipo mappato integrato, per le props dei moduli di aggiornamento in cui non tutti i campi sono obbligatori.
interface User { id: string; name: string; email: string; role: string; }
// Update form — all fields optional:
type UserUpdateProps = Partial<Omit<User, 'id'>>;
function UserUpdateForm(props: UserUpdateProps) {
// name, email, role are all optional
}Record con tipi mappati
Crei tipi di lookup in cui le chiavi provengono da un'unione e i valori hanno una struttura coerente.
type Status = 'idle' | 'loading' | 'success' | 'error';
type StatusConfig = Record<Status, {
label: string;
icon: React.ReactNode;
color: string;
}>;
const statusConfig: StatusConfig = {
idle: { label: 'Ready', icon: <ReadyIcon />, color: 'gray' },
loading: { label: 'Loading...', icon: <Spinner />, color: 'blue' },
success: { label: 'Done', icon: <CheckIcon />, color: 'green' },
error: { label: 'Error', icon: <XIcon />, color: 'red' },
};Selezionare le chiavi obbligatorie
Utilizzi i tipi condizionali con -?, che rimuove l'opzionalità, per estrarre solo le chiavi obbligatorie di un tipo.
type RequiredKeys<T> = {
[K in keyof T]-?: undefined extends T[K] ? never : K;
}[keyof T];
interface FormData { name: string; email: string; phone?: string; }
type Required = RequiredKeys<FormData>; // 'name' | 'email'Tipi template literal
I tipi template literal combinano tipi literal di stringa, consentendo di tipizzare i nomi degli eventi, le stringhe delle classi CSS e i percorsi delle API.
type EventName = 'click' | 'change' | 'focus';
type HandlerName = `on${Capitalize<EventName>}`;
// 'onClick' | 'onChange' | 'onFocus'
type ApiPath<R extends string> = `/api/${R}`;
type UserPath = ApiPath<'users'>; // '/api/users'Estrarre le props in modo condizionale
Utilizzi Extract e Exclude per filtrare i tipi unione.
type AllProps = 'onClick' | 'onHover' | 'onChange' | 'style';
type EventHandlers = Extract<AllProps, `on${string}`>;
// 'onClick' | 'onHover' | 'onChange'
type NonEventProps = Exclude<AllProps, `on${string}`>;
// 'style'Tipi mappati per la validazione dei moduli
Generi tipi per gli errori di validazione che rispecchiano la struttura dei dati del modulo: una stringa di messaggio d'errore per ogni campo.
interface LoginForm { email: string; password: string; }
type FormErrors<T> = { [K in keyof T]?: string };
type LoginErrors = FormErrors<LoginForm>;
// { email?: string; password?: string }
const errors: LoginErrors = { email: 'Invalid email format' };Tipi mappati discriminati
Combini i tipi mappati con i tipi condizionali per creare tipi la cui struttura cambia in base a un discriminante.
type EventMap = {
click: { x: number; y: number };
keydown: { key: string; code: string };
resize: { width: number; height: number };
};
type Handler<E extends keyof EventMap> = (event: EventMap[E]) => void;
function on<E extends keyof EventMap>(event: E, handler: Handler<E>) {
window.addEventListener(event, handler as EventListener);
}Quando non sovra-ingegnerizzare i tipi
I tipi condizionali e mappati offrono maggiore potenza, ma anche maggiore complessità. Li utilizzi quando eliminano duplicazioni reali o prevengono bug concreti, non solo per dimostrare la conoscenza di TypeScript.
Verifica rapida
Che cosa fa il tipo mappato { [K in keyof T]?: T[K] }?
Riepilogo
I tipi condizionali (T extends U ? X : Y) creano tipi che scelgono un ramo in base all'assegnabilità. I tipi mappati ([K in keyof T]) trasformano ogni proprietà di un tipo. Li utilizzi per i tipi parziali dei moduli di aggiornamento, le mappe tipizzate degli eventi, le strutture degli errori dei moduli e i percorsi API basati su template literal.
Impara React con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 88
- Lezioni
- 324
Domande Frequenti
La lezione «Tipi condizionali e mappati in React» è gratuita?
Sì — il testo completo di «Tipi condizionali e mappati in React» è 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 React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «Tipi condizionali e mappati in React»?
Costruisca tipi per le props dei componenti che cambiano forma in base ai valori di altre props, utilizzando i tipi condizionali. Eserciti React 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 React Academy?
Non è richiesta alcuna esperienza precedente. React 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 2 di 4.
Quanto tempo richiede la lezione «Tipi condizionali e mappati in React»?
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 React Academy?
Sì. Ogni lezione React 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
- Unioni discriminate per le varianti dei componenti
- Tipi condizionali e mappati in React
- Componenti polimorfici con la prop 'as'
- Form type-safe e contratti delle risposte API