Felder aus einem Typ in TypeScript ausschließen: Eine einfache Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Wie man eine Eigenschaft aus einem Typ in TypeScript ausschließt: Code vor überflüssigem Ballast bewahren

\n\n

Haben Sie schon einmal die Situation erlebt, dass Sie ein großes Interface oder einen großen Typ haben und einen neuen Typ erstellen müssen, der fast identisch ist, aber ohne ein oder zwei Felder? Den gesamten Code duplizieren? 15 Zeilen kopieren und eine löschen? Es gibt einen eleganteren Weg. Heute schauen wir uns an, wie man in TypeScript eine Eigenschaft aus einem Typ ausschließt – dies ist eines der beliebtesten Hilfsprogramme, das vor Duplizierung schützt und den Code sauberer macht.

\n\n

Dieses Thema ist ein echter Hit auf Stack Overflow. Die Frage "Exclude property from type" erzielt tausende von Aufrufen, weil früher oder später jeder Entwickler auf die Notwendigkeit stößt, ein Feld aus einem Typ zu entfernen oder eine Eigenschaft aus einem Interface auszuschließen. Lassen Sie uns der Reihe nach vorgehen, angefangen bei einfachen Beispielen bis hin zu fortgeschrittenen Techniken.

\n\n

Das Problem: Warum Felder aus einem Typ ausschließen?

\n\n

Stellen Sie sich vor, Sie haben ein Interface User:

\n\n
interface User {\n  id: number;\n  name: string;\n  email: string;\n  password: string;\n  createdAt: Date;\n}
\n\n

Sie möchten ein Registrierungsformular erstellen, in das der Benutzer Name, E-Mail und Passwort eingibt. Aber id wird auf dem Server generiert und createdAt automatisch. Sie benötigen einen Typ NewUser, der nur name, email und password enthält. Wie macht man das?

\n\n

Eine schlechte Lösung ist es, ein neues Interface von Grund auf zu deklarieren:

\n\n
interface NewUser {\n  name: string;\n  email: string;\n  password: string;\n}
\n\n

Das funktioniert, verletzt aber das DRY-Prinzip (Don't Repeat Yourself). Wenn wir den Typ von name in User ändern, müssten wir ihn auch in NewUser ändern. Genau hier kommt das Ausschließen von Eigenschaften aus einem Typ ins Spiel.

\n\n

Der Hilfstyp Omit: Das Hauptwerkzeug

\n\n

TypeScript bietet den eingebauten Hilfstyp Omit<Type, Keys>. Er erstellt einen neuen Typ, indem er die angegebenen Schlüssel aus dem ursprünglichen Typ ausschließt. Die Syntax ist einfach:

\n\n
type NewUser = Omit<User, 'id' | 'createdAt'>;
\n\n

Jetzt enthält NewUser nur name, email und password. Wenn wir email in User in Email ändern, übernimmt NewUser dies automatisch.

\n\n

Lassen Sie uns das in der Praxis überprüfen:

\n\n
const newUser: NewUser = {\n  name: 'Anna',\n  email: 'anna@example.com',\n  password: 'secure123'\n}; // ✅ Alles ok\n\nconst invalidUser: NewUser = {\n  name: 'Anna',\n  email: 'anna@example.com',\n  password: 'secure123',\n  id: 1 // ❌ Fehler: id existiert nicht im Typ NewUser\n};
\n\n

Hinweis: Omit funktioniert sowohl mit Interfaces als auch mit Typen. Es ist ein universelles Werkzeug zum Ausschließen von Feldern aus einem Typ.

\n\n

Wie funktioniert Omit unter der Haube?

\n\n

Um besser zu verstehen, wie TypeScript Eigenschaften aus einem Typ ausschließt, werfen wir einen Blick unter die Haube. Omit ist eine Kombination aus zwei anderen Hilfsprogrammen: Pick und Exclude.

\n\n

So ist es in der Standardbibliothek von TypeScript definiert:

\n\n
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
\n\n

Lassen Sie es uns Schritt für Schritt analysieren:

\n
    \n
  • keyof T – erhält alle Schlüssel des Typs T (z.B. 'id' | 'name' | 'email' | 'password' | 'createdAt')
  • \n
  • Exclude<keyof T, K> – schließt aus diesen Schlüsseln diejenigen aus, die in K angegeben sind (erhält 'name' | 'email' | 'password')
  • \n
  • Pick<T, ...> – wählt aus T nur die verbleibenden Schlüssel aus
  • \n
\n\n

Somit reduziert sich das Ausschließen einer Eigenschaft aus einem Interface auf das Filtern von Schlüsseln. Elegant, nicht wahr?

\n\n

Pick: Die Kehrseite von Omit

\n\n

Manchmal ist es einfacher, nicht auszuschließen, sondern im Gege

Blogs

Buchempfehlungen