spinny:~/writing $ less advanced-typescript-patterns.md
12TypeScript har blivit industristandarden för storskalig webbutveckling. Medan de flesta utvecklare känner till grunderna med interfaces och typer, ligger den verkliga kraften i det avancerade typsystemet. Här är 5 mönster som kommer att särskilja dig som senior ingenjör.34## 1. Generic Constraints56Generics är kraftfulla, men ibland behöver du begränsa vad som kan skickas in. `extends` är din vän här.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```1718Genom att säkerställa att `T` utökar `HasId`, garanterar vi att åtkomst till `.id` inuti funktionen är säker.1920## 2. Conditional Types2122Conditional types låter dig skapa icke-uniforma typmappningar. Syntaxen liknar den ternära operatorn i JavaScript.2324```typescript25type IsString<T> = T extends string ? true : false;2627type A = IsString<string>; // true28type B = IsString<number>; // false29```3031Ett praktiskt användningsfall är att filtrera bort typer från 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 låter dig skapa nya typer baserade på befintliga genom att transformera egenskaper.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 till och med lägga till eller ta bort modifierare:5657```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```6263## 4. Template Literal Types6465Introducerade i TypeScript 4.1, dessa låter dig manipulera strängtyper direkt.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```7778Detta är otroligt användbart för att typa strängar som följer ett specifikt mönster, som CSS-klasser eller händelsenamn.7980## 5. Nyckelordet `infer`8182Nyckelordet `infer` inom conditional types låter dig extrahera typer från andra 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```9394Här ber vi TypeScript att "inferera" returtypen `R` av en funktion och returnera den.9596## Slutsats9798Att behärska dessa mönster gör det möjligt att skriva bibliotek och verktyg som är robusta och ger en utmärkt utvecklarupplevelse (DX). Målet med avancerad TypeScript är inte komplexitet för komplexitetens skull, utan säkerhet och uttrycksfullhet.99
:5 Avancerade TypeScript-mönster för Seniora Ingenjörerlines 1-99 (END) — press q to close