spinny:~/writing $ less advanced-typescript-patterns.md
12TypeScript ist zum Industriestandard für die groß angelegte Webentwicklung geworden. Während die meisten Entwickler die Grundlagen von Schnittstellen und Typen kennen, liegt die wahre Kraft in seinem fortgeschrittenen Typsystem. Hier sind 5 Muster, die Sie als Senior-Entwickler auszeichnen werden.34## 1. Generic Constraints56Generics sind mächtig, aber manchmal müssen Sie einschränken, was übergeben werden kann. `extends` ist hier Ihr Freund.78```typescript9interface HasId {10 id: string;11}1213function getById<T extends HasId>(list: T[], id: string): T | undefined {14 return list.find((item) => item.id === id);15}16```1718Indem wir sicherstellen, dass `T` `HasId` erweitert, garantieren wir, dass der Zugriff auf `.id` innerhalb der Funktion sicher ist.1920## 2. Conditional Types2122Bedingte Typen ermöglichen es Ihnen, ungleichmäßige Typzuordnungen zu erstellen. Die Syntax ähnelt dem ternären Operator in JavaScript.2324```typescript25type IsString<T> = T extends string ? true : false;2627type A = IsString<string>; // true28type B = IsString<number>; // false29```3031Ein praktischer Anwendungsfall ist das Herausfiltern von Typen aus einer Union:3233```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```3738## 3. Mapped Types3940Zugeordnete Typen ermöglichen es Ihnen, neue Typen basierend auf alten zu erstellen, indem Sie Eigenschaften transformieren.4142```typescript43type ReadOnly<T> = {44 readonly [P in keyof T]: T[P];45};4647interface User {48 name: string;49 age: number;50}5152type ReadOnlyUser = ReadOnly<User>;53```5455Sie können sogar Modifikatoren hinzufügen oder entfernen:5657```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```6263## 4. Template Literal Types6465In TypeScript 4.1 eingeführt, ermöglichen diese die direkte Manipulation von String-Typen.6667```typescript68type World = 'world';69type Greeting = `hello ${World}`; // "hello world"7071type Color = 'red' | 'blue';72type Quantity = 'light' | 'dark';7374type Palette = `${Quantity}-${Color}`;75// "light-red" | "light-blue" | "dark-red" | "dark-blue"76```7778Dies ist unglaublich nützlich für die Typisierung von Strings, die einem bestimmten Muster folgen, wie CSS-Klassen oder Ereignisnamen.7980## 5. Das `infer` Schlüsselwort8182Das `infer` Schlüsselwort innerhalb von bedingten Typen ermöglicht es Ihnen, Typen aus anderen Typen zu extrahieren.8384```typescript85type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;8687function check(): boolean {88 return true;89}9091type CheckReturn = ReturnType<typeof check>; // boolean92```9394Hier bitten wir TypeScript, den Rückgabetyp `R` einer Funktion zu "inferieren" (abzuleiten) und ihn zurückzugeben.9596## Fazit9798Das Beherrschen dieser Muster ermöglicht es Ihnen, Bibliotheken und Dienstprogramme zu schreiben, die robust sind und eine hervorragende Entwicklererfahrung (DX) bieten. Das Ziel von fortgeschrittenem TypeScript ist nicht Komplexität um der Komplexität willen, sondern Sicherheit und Ausdruckskraft.99
:5 Fortgeschrittene TypeScript-Muster für Senior-Entwicklerlines 1-99 (END) — press q to close