0Pricing
React Academy · Lektion

Bedingte und gemappte Types in React

Erstellen Sie Component-Prop-Typen, deren Struktur sich mithilfe bedingter Types abhängig von anderen Prop-Werten ändert.

Bedingte und gemappte Types in React ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Grundlagen bedingter Typen

Ein bedingter Typ verwendet die Syntax T extends U ? X : Y – wenn T U zugewiesen werden kann, wird der Typ zu X aufgelöst, andernfalls zu Y.

type IsString<T> = T extends string ? true : false;

type A = IsString<string>;  // true
type B = IsString<number>;  // false
type C = IsString<'hello'>; // true

Bedingte Props abhängig von anderen Props

Verwenden Sie bedingte Typen, um eine Prop abhängig vom Wert einer anderen Prop verpflichtend oder optional zu machen.

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 };

Mapped Types

Mapped Types erstellen einen neuen Typ, indem sie jede Eigenschaft eines bestehenden Typs transformieren. Die Syntax in keyof iteriert über alle Schlüssel.

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 };

Props für Update-Formulare optional machen

Verwenden Sie Partial<T> (einen integrierten Mapped Type) für Props von Update-Formularen, bei denen nicht alle Felder erforderlich sind.

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 mit Mapped Types

Erstellen Sie Lookup-Typen, deren Schlüssel aus einer Union stammen und deren Werte eine einheitliche Struktur haben.

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' },
};

Erforderliche Schlüssel auswählen

Verwenden Sie bedingte Typen mit -? (optional entfernen), um nur die erforderlichen Schlüssel eines Typs zu extrahieren.

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-Typen

Template-Literal-Typen setzen String-Literal-Typen zusammen und ermöglichen typisierte Event-Namen, CSS-Klassenstrings und API-Pfade.

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'

Props bedingt extrahieren

Verwenden Sie Extract und Exclude, um Union-Typen zu filtern.

type AllProps = 'onClick' | 'onHover' | 'onChange' | 'style';
type EventHandlers = Extract<AllProps, `on${string}`>;
// 'onClick' | 'onHover' | 'onChange'

type NonEventProps = Exclude<AllProps, `on${string}`>;
// 'style'

Mapped Types für Formularvalidierung

Generieren Sie Validierungsfehlertypen, die die Struktur Ihrer Formulardaten abbilden – für jedes Feld eine Fehlernachricht als String.

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' };

Discriminated Mapped Types

Kombinieren Sie Mapped Types mit bedingten Typen, um Typen zu erstellen, deren Struktur sich abhängig von einem Discriminant ändert.

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);
}

Wann Sie Typen nicht überkonstruieren sollten

Bedingte Typen und Mapped Types bieten mehr Möglichkeiten, erhöhen aber auch die Komplexität. Verwenden Sie sie, wenn sie echte Duplizierung beseitigen oder tatsächliche Fehler verhindern – nicht nur, um TypeScript-Kenntnisse zu demonstrieren.

Kurzer Test

Was bewirkt der Mapped Type { [K in keyof T]?: T[K] }?

Zusammenfassung

Bedingte Typen (T extends U ? X : Y) erstellen Typen, die abhängig von der Zuweisbarkeit unterschiedliche Zweige wählen. Mapped Types ([K in keyof T]) transformieren jede Eigenschaft eines Typs. Verwenden Sie sie für partielle Typen von Update-Formularen, typisierte Event-Maps, Strukturen von Formularfehlern und API-Pfade mit Template-Literal-Typen.

Häufig gestellte Fragen

Ist die Lektion „Bedingte und gemappte Types in React“ kostenlos?

Ja — der vollständige Text von „Bedingte und gemappte Types in React“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Bedingte und gemappte Types in React“?

Erstellen Sie Component-Prop-Typen, deren Struktur sich mithilfe bedingter Types abhängig von anderen Prop-Werten ändert. Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um React Academy zu starten?

Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Bedingte und gemappte Types in React“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?

Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Discriminated Unions für Component-Varianten
  2. Bedingte und gemappte Types in React
  3. Polymorphe Components mit der 'as'-Prop
  4. Typsichere Formulare und API-Response-Verträge
← Zurück zu React Academy