spinny:~/writing $ less advanced-typescript-patterns.md
12A TypeScript ipari szabvannya valt a nagylepteku webfejlesztesben. Mig a legtobb fejleszto ismeri az interfeszek es tipusok alapjait, az igazi ero a halado tipusrendszerben rejlik. Ime 5 minta, amely megkulonboztet egy senior mernokot.34## 1. Generic Constraints56A generikusok hatalmasak, de neha korlatozni kell, mit lehet atadni. Az `extends` a baratod ebben.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```1718Azzal, hogy biztositjuk, hogy `T` kiterjeszti a `HasId`-t, garantaljuk, hogy a `.id` elerese a fuggvenyen belul biztonsagos.1920## 2. Conditional Types2122A felteteles tipusok lehetove teszik nem egysegu tipuslekepezesek letrehozasat. A szintaxis hasonlo a JavaScript-beli ternar operatorhoz.2324```typescript25type IsString<T> = T extends string ? true : false;2627type A = IsString<string>; // true28type B = IsString<number>; // false29```3031Gyakorlati hasznalati eset a tipusok kiszurese egy uniobol:3233```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```3738## 3. Mapped Types3940A lekkepezett tipusok lehetove teszik uj tipusok letrehozasat regiek alapjan a tulajdonsagok transzformalasaval.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```5455Sot, modositokat is hozzaadhatsz vagy eltavolithatsz:5657```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```6263## 4. Template Literal Types6465A TypeScript 4.1-ben bevezetve, ezek lehetove teszik a string tipusok kozvetlen manipulalasat.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```7778Ez hihetetlen hasznos olyan stringek tipizalasahoz, amelyek meghatarozott mintat kovetnek, mint peldaul CSS osztalyok vagy esemenynevek.7980## 5. Az `infer` kulcsszo8182A felteteles tipusokon beluli `infer` kulcsszo lehetove teszi tipusok kivonalasat mas tipusokbol.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```9394Itt arra kerjuk a TypeScript-et, hogy "kovetkeztesse ki" egy fuggveny `R` visszateresi tipusat es adja vissza.9596## Osszefoglalas9798Ezeknek a mintaknak az elsajatitasa lehetove teszi, hogy robusztus konyvtarakat es segedeszközöket irj, amelyek kiváló fejlesztői élményt (DX) nyújtanak. A haladó TypeScript célja nem az összetettség az összetettség kedvéért, hanem a biztonság és a kifejezőerő.99
:5 halado TypeScript minta senior mernokokneklines 1-99 (END) — press q to close