Skip to content

Generics TypeScript dijelaskan

Pola generics yang paling sering Anda pakai, dikelompokkan per tugas: mendeklarasikan parameter tipe, membatasinya, memberi nilai bawaan, bercabang dengan conditional, menangkap dengan infer, dan memetakan sebuah bentuk. Setiap baris memasangkan pola dengan contoh satu baris.

Generic adalah parameter tipe: placeholder untuk tipe yang dipilih pemanggil, sehingga satu fungsi atau tipe bekerja untuk banyak bentuk tanpa kehilangan presisi. Baca <T> sebagai untuk suatu tipe T. Kekuatannya berasal dari membatasi T, bercabang padanya, dan memetakannya. Pola-pola di bawah adalah kosakata kerjanya.

Tabel referensi · 28 entri
28 of 28 rows
Deklarasi
Parameter tipe yang dipilih pemanggil.function first<T>(xs: T[]): T
Beberapa parameter tipe yang independen.function pair<T, U>(a: T, b: U): [T, U]
Parameter kedua yang terikat pada kunci-kunci parameter pertama.function get<T, K extends keyof T>(o: T, k: K): T[K]
Class dengan parameter tipe pada field dan metodenya.class Box<T> { value: T }
Bentuk objek dengan parameter tipe.interface Result<T> { data: T }
Parameter tipe pada arrow function; koma di akhir mencegah file .tsx membacanya sebagai JSX.const first = <T,>(xs: T[]): T => xs[0]
Batasan
Mewajibkan T dapat di-assign ke Type.function len<T extends { length: number }>(x: T)
Membatasi T pada salah satu kunci tipe lain.type Keys<O> = keyof O
Membatasi T pada class yang bisa dikonstruksi.function make<C extends new () => C>(c: C): C
Mewajibkan T memenuhi beberapa batasan sekaligus.function log<T extends Error & { code: number }>(e: T)
Membatasi ke apa pun; menjaga parameter tetap generik tanpa mempersempitnya.type Wrap<T> = T extends unknown ? { v: T } : never
Default dan infer
Memberi T nilai bawaan saat pemanggil menghilangkannya.function parse<T = string>(): T
Menangkap sebuah tipe di dalam conditional.type El<T> = T extends Array<infer I> ? I : never
Membuka bungkus Promise bersarang hingga tipe di dalamnya.type Data = Awaited<Promise<User>>
Menangkap satu bagian dari template literal type.type Path<S> = S extends `/api/${infer R}` ? R : never
Memeriksa seluruh union sekaligus; naked T meng-infer satu anggota pada satu waktu.type El<T> = [T] extends [Array<infer I>] ? I : never
Conditional dan mapped
Memilih tipe berdasarkan apakah T dapat di-assign ke U.type IsStr<T> = T extends string ? true : false
Membangun tipe objek baru dengan mentransformasi setiap kunci T.type Frozen<T> = { [K in keyof T]: Readonly<T[K]> }
Objek yang kuncinya K dan nilainya V.type Scores = Record<string, number>
Generics bawaan yang diturunkan dari pola-pola di atas.type Preview = Pick<User, "id" | "name">
Naked T sebelum extends berjalan sekali per anggota union dan menggabungkan hasilnya.ToArray<'a' | 'b'> = 'a'[] | 'b'[]
Menambah atau menghapus modifier pada kunci yang dipetakan.type Req<T> = { [K in keyof T]-?: T[K] }
Kunci-kunci dari sebuah nilai runtime, sebagai tipe.const opts = { a: 1 }; type K = keyof typeof opts
Membangun tipe string dari tipe-tipe string lain.type Route = `/users/${string}`
Menggabungkan tipe tuple dari ujung ke ujung.type Concat<T extends unknown[], U extends unknown[]> = [...T, ...U]
Tipe yang definisinya merujuk dirinya sendiri.type Json = string | number | Json[] | { [k: string]: Json }
Memeriksa nilai terhadap sebuah tipe dan mempertahankan tipe literalnya yang lebih sempit.const c = { dark: "#000" } satisfies Record<string, string>
Mempertahankan tipe literal pemanggil alih-alih melebarkannya (TS 5.0).function first<const T>(xs: readonly T[]): T