spinny:~/writing $ less advanced-typescript-patterns.md
12Το TypeScript έχει γίνει το βιομηχανικό πρότυπο για μεγάλης κλίμακας ανάπτυξη ιστού. Ενώ οι περισσότεροι προγραμματιστές γνωρίζουν τα βασικά των interfaces και των τύπων, η πραγματική δύναμη βρίσκεται στο προχωρημένο σύστημα τύπων. Εδώ είναι 5 μοτίβα που θα σας ξεχωρίσουν ως έμπειρο μηχανικό.34## 1. Generic Constraints56Τα Generics είναι ισχυρά, αλλά μερικές φορές χρειάζεται να περιορίσετε τι μπορεί να περαστεί. Το `extends` είναι ο σύμμαχός σας εδώ.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```1718Διασφαλίζοντας ότι το `T` επεκτείνει το `HasId`, εγγυόμαστε ότι η πρόσβαση στο `.id` μέσα στη συνάρτηση είναι ασφαλής.1920## 2. Conditional Types2122Τα Conditional types σας επιτρέπουν να δημιουργήσετε μη ομοιόμορφες αντιστοιχίσεις τύπων. Η σύνταξη μοιάζει με τον τριαδικό τελεστή στη JavaScript.2324```typescript25type IsString<T> = T extends string ? true : false;2627type A = IsString<string>; // true28type B = IsString<number>; // false29```3031Μια πρακτική περίπτωση χρήσης είναι το φιλτράρισμα τύπων από ένα union:3233```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```3738## 3. Mapped Types3940Τα Mapped types σας επιτρέπουν να δημιουργήσετε νέους τύπους βασισμένους σε παλιούς μετασχηματίζοντας ιδιότητες.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```5455Μπορείτε ακόμη να προσθέσετε ή να αφαιρέσετε τροποποιητές:5657```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```6263## 4. Template Literal Types6465Εισήχθησαν στο TypeScript 4.1, αυτά σας επιτρέπουν να χειρίζεστε τύπους συμβολοσειρών απευθείας.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```7778Αυτό είναι απίστευτα χρήσιμο για την τυποποίηση συμβολοσειρών που ακολουθούν ένα συγκεκριμένο μοτίβο, όπως κλάσεις CSS ή ονόματα συμβάντων.7980## 5. Η Λέξη-κλειδί `infer`8182Η λέξη-κλειδί `infer` μέσα στα conditional types σας επιτρέπει να εξάγετε τύπους από άλλους τύπους.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```9394Εδώ, ζητάμε από το TypeScript να "συμπεράνει" τον τύπο επιστροφής `R` μιας συνάρτησης και να τον επιστρέψει.9596## Συμπέρασμα9798Η εξοικείωση με αυτά τα μοτίβα σας επιτρέπει να γράφετε βιβλιοθήκες και βοηθήματα που είναι ισχυρά και προσφέρουν εξαιρετική εμπειρία προγραμματιστή (DX). Ο στόχος του προχωρημένου TypeScript δεν είναι η πολυπλοκότητα για χάρη της πολυπλοκότητας, αλλά η ασφάλεια και η εκφραστικότητα.99
:5 Προχωρημένα Μοτίβα TypeScript για Έμπειρους Μηχανικούςlines 1-99 (END) — press q to close