Villkorliga och mappade typer i React
Bygg komponentpropstyper vars form ändras utifrån andra prop-värden med conditional types.
Villkorliga och mappade typer i React är en gratis lektion i React Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.
Grunderna i villkorstyper
En villkorstyp använder syntaxen T extends U ? X : Y – om T kan tilldelas till U blir resultatet typen X, annars Y.
type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // false
type C = IsString<'hello'>; // trueVillkorsstyrda props baserat på andra props
Använd villkorstyper för att göra en prop obligatorisk eller valfri baserat på värdet i en annan 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 };Mappade typer
Mappade typer skapar en ny typ genom att omforma varje property i en befintlig typ. Syntaxen in keyof itererar över alla nycklar.
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 };Gör props valfria i uppdateringsformulär
Använd Partial<T> (en inbyggd mappad typ) för props i uppdateringsformulär där inte alla fält är obligatoriska.
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 med mappade typer
Skapa uppslagstyper där nycklarna kommer från en union och värdena har en enhetlig form.
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' },
};Välj obligatoriska nycklar
Använd villkorstyper med -? (ta bort optional) för att extrahera endast de obligatoriska nycklarna i en typ.
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'Template literal-typer
Template literal-typer kombinerar strängliteraltyper och möjliggör typade händelsenamn, CSS-klasssträngar och API-sökvägar.
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'Extrahera props villkorligt
Använd Extract och Exclude för att filtrera unionstyper.
type AllProps = 'onClick' | 'onHover' | 'onChange' | 'style';
type EventHandlers = Extract<AllProps, `on${string}`>;
// 'onClick' | 'onHover' | 'onChange'
type NonEventProps = Exclude<AllProps, `on${string}`>;
// 'style'Mappade typer för formulärvalidering
Generera typer för valideringsfel som speglar formen på dina formulärdata – en sträng med ett felmeddelande per fält.
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' };Diskriminerade mappade typer
Kombinera mappade typer med villkorstyper för att skapa typer som ändrar form baserat på en diskriminant.
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);
}När typer inte ska överkonstrueras
Villkors- och mappade typer ger större uttryckskraft men också mer komplexitet. Använd dem när de eliminerar verklig duplicering eller förhindrar faktiska buggar – inte bara för att visa kunskaper i TypeScript.
Snabbkontroll
Vad gör den mappade typen { [K in keyof T]?: T[K] }?
Sammanfattning
Villkorstyper (T extends U ? X : Y) skapar typer som förgrenas baserat på tilldelningsbarhet. Mappade typer ([K in keyof T]) omformar varje property i en typ. Använd dem för partiella typer i uppdateringsformulär, typade händelsekartor, former för formulärfel och API-sökvägar med template literals.
Lär dig React med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 88
- Lektioner
- 324
Vanliga frågor
Är lektionen ”Villkorliga och mappade typer i React” gratis?
Ja – hela texten till ”Villkorliga och mappade typer i React” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Villkorliga och mappade typer i React”?
Bygg komponentpropstyper vars form ändras utifrån andra prop-värden med conditional types. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig React Academy?
Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Villkorliga och mappade typer i React”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här React Academy-lektionen?
Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Discriminated unions för komponentvarianter
- Villkorliga och mappade typer i React
- Polymorfa komponenter med propen 'as'
- Typsäkra formulär och kontrakt för API-svar