spinny:~/writing $ less advanced-typescript-patterns.md
12TypeScript er blevet industristandarden for storstilet webudvikling. Mens de fleste udviklere kender det grundlæggende om interfaces og typer, ligger den virkelige kraft i dets avancerede typesystem. Her er 5 mønstre, der vil adskille dig som seniorudvikler.34## 1. Generic Constraints56Generics er kraftfulde, men nogle gange har du brug for at begrænse, hvad der kan sendes ind. `extends` er din ven her.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```1718Ved at sikre, at `T` udvider `HasId`, garanterer vi, at det er sikkert at tilgå `.id` inde i funktionen.1920## 2. Conditional Types2122Conditional Types giver dig mulighed for at oprette ikke-uniforme typemappings. Syntaksen ligner den ternære operator i JavaScript.2324```typescript25type IsString<T> = T extends string ? true : false;2627type A = IsString<string>; // true28type B = IsString<number>; // false29```3031Et praktisk anvendelsestilfælde er at filtrere typer fra en union:3233```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```3738## 3. Mapped Types3940Mapped Types giver dig mulighed for at oprette nye typer baseret på gamle ved at transformere egenskaber.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```5455Du kan endda tilføje eller fjerne modifikatorer:5657```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```6263## 4. Template Literal Types6465Introduceret i TypeScript 4.1 giver disse dig mulighed for at manipulere strengtyper direkte.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```7778Dette er utroligt nyttigt til at type strenge, der følger et bestemt mønster, som CSS-klasser eller hændelsesnavne.7980## 5. Nøgleordet `infer`8182Nøgleordet `infer` inden for conditional types giver dig mulighed for at udtrække typer fra andre typer.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```9394Her beder vi TypeScript om at "udlede" returtypen `R` af en funktion og returnere den.9596## Konklusion9798At mestre disse mønstre giver dig mulighed for at skrive biblioteker og værktøjer, der er robuste og giver en fremragende udvikleroplevelse (DX). Målet med avanceret TypeScript er ikke kompleksitet for kompleksitetens skyld, men sikkerhed og udtryksfuldhed.99
:5 avancerede TypeScript-mønstre for seniorudviklerelines 1-99 (END) — press q to close