Typ-Level-Programmierung in TypeScript [de]

TypeScript-Typannotationen sind eine eigene Programmiersprache! Typen sind Werte, Generics sind Funktionsparameter und TypeScript als Ganzes ist nicht nur ein wenig zusätzliche Syntax, sondern eine komplette in JavaScript eingebettete DSL, die zu verstehen sich lohnt. TypeScript-Typen nicht nur zu schreiben, sondern richtiggehend zu programmieren ist eine Superkraft, in die dieser Talk Sie einweiht! Mit nur wenig Umdenken und ein paar eher unbekannten TypeScript-Features können auch Sie komplexe Typ-Beziehungsgeflechte aus wenigen basalen Regeln herleiten.

Dieser Workshop führt durch die Programmierung eines Message-Bus-Systems und verwendet dabei fortgeschrittene TypeScript-Features wie Mapped Types, Discriminated Unions und Conditional Types, um den Message Bus mit wenigen, aber smarten Typ-Definitionen typesafe zu machen. Dabei lernen wir Typannotationen als eigene Programmiersprache kennen und bekommen eine gänzliche neue Perspektive auf den Umgang mit TypeScript-Typen eröffnet. Diverse praktische Lösungen für häufige TypeScript-Probleme werden untersucht und ihre Trade-offs detailliert diskutiert.

Das Ziel ist die Synthese aus der Flexibilität von JavaScript mit der Typ-Sicherheit einer statischen Programmiersprache. Am Ende des Workshops genießen Sie offiziell den Status eines wahren TypeScript-Großmeisters!

Agenda

  1. Intro und Zielsetzung: was bringt uns Typ-Level-Programmierung?
    • Diskussion statisch typisierte vs. dynamisch typisierte Sprachen
    • Tradeoffs in TypeScript
    • Ziele von Typ-Level-Programmierung
  2. Reacap und Rekontextulatisierung: kleiner Refresher zu einigen grundsätzlichen Eigenschaften des Typsystem von TypeScript
    • Typinferenz und Sinn und Zweck von Typannotationen
    • Gradual Typing
    • Control Flow Analysis
    • Structural Subtyping
    • Kovarianz und Kontravarianz
  3. Kleine Typ-Hexereien für datenorientierte Programmierung
    • Einstieg in fortgeschrittene TS-Syntax auf Basis der in Punkt 2 herausgearbeiteten Eigenschaften des Typsystems
    • Komponentenbasierte Typen (Lookup Type, Type Query, keyof-Operator)
    • Parametrisierte Typen (Generics und Generics mit Bedingungen)
    • Union- und Intersection Types, Type Narrowing und Type Guards, Discriminated Unions, Literal Unions vs. Enums
    • Praktische Beispiele (Typesicheres Message Passing, Umgang mit komplexen Objekten, generische Pick-Funktion)
  4. Fortgeschrittene Typ-Magie: Exkurs in die abgefahreneren Features wie etwa Conditional Types und das Infer-Keyword
    • Betrachtung und Re-Implementierung von Type-Utilities
    • Mapped Types
    • Conditional Types (inkl. Distribution-Verhalten)
    • Typ-Ableitung aus Basis-Typen
    • Rekursive Typen
    • Infer-Keyword
    • Fortgeschrittene Typ-Transformationen (z.B. UnionToIntersection)
  5. BYOTP (Bring Your Own Type Problem): wir besprechen gemeinsam Typ-Probleme aus dem Alltag der Teilnehmer

Location & Time

  • When? 25. Oct, 09:00 to 17:00
  • Where? Disy Informationssysteme GmbH, Zimmerstraße 3, 76137 Karlsruhe
    (OSM, Google Maps)