spinny:~/writing $ less advanced-typescript-patterns.md
12TypeScript telah menjadi standar industri untuk pengembangan web berskala besar. Meskipun sebagian besar pengembang mengetahui dasar-dasar interface dan type, kekuatan sebenarnya terletak pada sistem tipe tingkat lanjutnya. Berikut adalah 5 pola yang akan membedakan Anda sebagai insinyur senior.34## 1. Generic Constraints56Generics sangat powerful, tetapi terkadang Anda perlu membatasi apa yang bisa dimasukkan. `extends` adalah teman Anda di sini.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```1718Dengan memastikan `T` meng-extend `HasId`, kita menjamin bahwa mengakses `.id` di dalam fungsi adalah aman.1920## 2. Conditional Types2122Conditional types memungkinkan Anda membuat pemetaan tipe yang tidak seragam. Sintaksnya mirip dengan operator ternary di JavaScript.2324```typescript25type IsString<T> = T extends string ? true : false;2627type A = IsString<string>; // true28type B = IsString<number>; // false29```3031Kasus penggunaan praktis adalah memfilter tipe dari union:3233```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```3738## 3. Mapped Types3940Mapped types memungkinkan Anda membuat tipe baru berdasarkan tipe yang sudah ada dengan mentransformasi propertinya.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```5455Anda bahkan bisa menambah atau menghapus modifier:5657```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```6263## 4. Template Literal Types6465Diperkenalkan di TypeScript 4.1, fitur ini memungkinkan Anda memanipulasi tipe string secara langsung.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```7778Ini sangat berguna untuk mengetik string yang mengikuti pola tertentu, seperti kelas CSS atau nama event.7980## 5. Kata Kunci `infer`8182Kata kunci `infer` dalam conditional types memungkinkan Anda mengekstrak tipe dari tipe lain.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```9394Di sini, kita meminta TypeScript untuk "menyimpulkan" tipe kembalian `R` dari sebuah fungsi dan mengembalikannya.9596## Kesimpulan9798Menguasai pola-pola ini memungkinkan Anda menulis library dan utilitas yang kokoh dan memberikan pengalaman pengembang (DX) yang sangat baik. Tujuan TypeScript tingkat lanjut bukanlah kompleksitas demi kompleksitas, melainkan keamanan dan ekspresivitas.99
:5 Pola TypeScript Tingkat Lanjut untuk Insinyur Seniorlines 1-99 (END) — press q to close