0Pricing
TypeScript Academy · Lektion

Was ist eine DSL auf Typebene

Verwenden Sie Typen, um eine Fluent API auf gültige Programme zu beschränken.

Was ist eine DSL auf Typebene ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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 TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist eine DSL auf Typebene

Eine DSL (domänenspezifische Sprache) auf Typebene verwendet TypeScript-Typen, um eine API so einzuschränken, dass nur gültige Programme kompiliert werden. Die Typen fungieren als Grammatik: Ungültige Kombinationen werden abgelehnt, bevor der Code überhaupt ausgeführt wird.

Eingebettete DSLs

Eine eingebettete DSL lebt innerhalb der Wirtssprache (hier TypeScript) und nicht in einem separaten Parser. Sie schreiben gewöhnliches TS, aber das Typsystem erzwingt die Regeln der DSL.

Ein vertrautes Beispiel

Sie haben bereits DSLs auf Typebene verwendet: einen Query-Builder, der nur gültige Spaltennamen zulässt, oder einen Router, der Parameter aus einem Pfad ableitet. Die Typen kodieren, was die API erlaubt.

Eine Fluent-API einschränken

Die zentrale Idee: Jede Methode gibt einen Typ zurück, der einschränkt, welche Methoden Sie als Nächstes aufrufen können. Aufrufe in der falschen Reihenfolge verhindern die Kompilierung.

interface Empty { from(t: string): HasFrom; }
interface HasFrom { where(c: string): HasFrom; select(): string; }

declare const q: Empty;
q.from("users").select();      // ok
q.select();                    // Error: select not on Empty

Zustandsmaschinen in Typen

Dieses Muster ist eine Zustandsmaschine auf Typebene: Jedes Interface ist ein Zustand, jede Methode ein Übergang in einen anderen Zustand. Der Compiler durchläuft die Maschine, während Sie Aufrufe verketten.

Warum nicht einfach Laufzeitprüfungen

Laufzeitprüfungen schlagen spät fehl – in Produktion, wenn Nutzer die Anwendung bereits verwenden. Eine DSL auf Typebene schlägt früh im Editor mit einer roten Wellenlinie fehl, bevor der Code ausgeliefert wird. Die Regeln sind dieselben, aber das Feedback ist deutlich günstiger.

Phantom-Typparameter

DSLs transportieren Informationen häufig in Phantom-Typparametern: Generics, die nur zur Compilezeit existieren, um den angesammelten Zustand (ausgewählte Spalten, gebundene Variablen) ohne Laufzeitkosten zu verfolgen.

interface Query<Selected extends string> {
  select<C extends string>(c: C): Query<Selected | C>;
}

Literaltypen als Tokens

String-Literaltypen dienen als Tokens der DSL. Zusammen mit Template-Literals und Unions ermöglichen sie es dem Typsystem, den Textinhalt Ihrer DSL zu analysieren.

type Direction = "asc" | "desc";
declare function orderBy(col: string, dir: Direction): void;
orderBy("age", "asc");   // ok
orderBy("age", "up");    // Error: not a Direction

Die Bausteine

DSLs auf Typebene kombinieren Generics für Zustände, bedingte Typen für Verzweigungen, Template-Literals zum Parsen von Strings und gemappte Typen zum Transformieren von Strukturen. Spätere Lektionen verwenden jeden dieser Bausteine.

Abwägungen

DSLs auf Typebene bieten starke Garantien, können bei übermäßiger Verwendung aber kryptische Fehler und langsamere Kompilierungen verursachen. Gute DSLs schaffen ein Gleichgewicht zwischen Sicherheit und verständlichen Fehlermeldungen (eine spätere Lektion behandelt dieses Thema).

Warum das wichtig ist

Wenn Sie Domänenregeln in Typen kodieren, wird der Compiler zum Experten für die Domäne: Er weist unsinnige Konstrukte automatisch zurück. So bieten Query-Builder, Formularbibliotheken und Effect-Systeme ihre starken Garantien.

Kurzer Test

Testen Sie Ihr Verständnis von DSLs auf Typebene.

Zusammenfassung

Eine DSL auf Typebene verwendet TypeScript-Typen als Grammatik, sodass nur gültige Programme kompiliert werden. Fluent-APIs modellieren Zustandsmaschinen, bei denen jede Methode einen zustandseinschränkenden Typ zurückgibt. Dabei dienen Phantom-Generics, Literaltyp-Tokens, Conditional Types, Template-Literal-Types und Mapped Types als Bausteine und liefern frühzeitig Feedback direkt im Editor.

Häufig gestellte Fragen

Ist die Lektion „Was ist eine DSL auf Typebene“ kostenlos?

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

Was lerne ich in „Was ist eine DSL auf Typebene“?

Verwenden Sie Typen, um eine Fluent API auf gültige Programme zu beschränken. Du übst TypeScript 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 TypeScript Academy zu starten?

Keine Vorkenntnisse erforderlich. TypeScript 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 1 von 4.

Wie lange dauert die Lektion „Was ist eine DSL auf Typebene“?

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 TypeScript Academy-Lektion Code schreiben und ausführen?

Ja. Jede TypeScript 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. Was ist eine DSL auf Typebene
  2. Eine Fluent-Query-DSL entwerfen
  3. Eingabevalidierung zur Compile-Zeit
  4. Fehlermeldungen in DSLs auf Typebene
← Zurück zu TypeScript Academy