| ประกาศ |
|---|
| พารามิเตอร์ประเภทที่ผู้เรียกเป็นคนเลือก | function first<T>(xs: T[]): T |
| พารามิเตอร์ประเภทหลายตัวที่ไม่ขึ้นต่อกัน | function pair<T, U>(a: T, b: U): [T, U] |
| พารามิเตอร์ตัวที่สองผูกกับคีย์ของตัวแรก | function get<T, K extends keyof T>(o: T, k: K): T[K] |
| คลาสที่มีพารามิเตอร์ประเภทบนฟิลด์และเมธอดของมัน | class Box<T> { value: T } |
| รูปร่างออบเจ็กต์ที่มีพารามิเตอร์ประเภท | interface Result<T> { data: T } |
| พารามิเตอร์ประเภทบน arrow function; จุลภาคต่อท้ายกันไฟล์ .tsx อ่านมันเป็น JSX | const first = <T,>(xs: T[]): T => xs[0] |
| กำหนดขอบเขต |
|---|
| กำหนดให้ T ต้อง assign ให้ Type ได้ | function len<T extends { length: number }>(x: T) |
| จำกัด T ให้เป็นคีย์ของประเภทอื่น | type Keys<O> = keyof O |
| จำกัด T ให้เป็นคลาสที่ construct ได้ | function make<C extends new () => C>(c: C): C |
| กำหนดให้ T ต้องผ่านหลายข้อจำกัดพร้อมกัน | function log<T extends Error & { code: number }>(e: T) |
| จำกัดด้วยอะไรก็ได้; คงพารามิเตอร์เป็น generic โดยไม่ตัดให้แคบลง | type Wrap<T> = T extends unknown ? { v: T } : never |
| ค่าเริ่มต้น & infer |
|---|
| ให้ค่าเริ่มต้นแก่ T เมื่อผู้เรียกไม่ระบุ | function parse<T = string>(): T |
| จับประเภทหนึ่งไว้ภายใน conditional | type El<T> = T extends Array<infer I> ? I : never |
| คลาย Promise ที่ซ้อนกันออกเป็นประเภทชั้นในของมัน | type Data = Awaited<Promise<User>> |
| จับชิ้นส่วนหนึ่งของ template literal type | type Path<S> = S extends `/api/${infer R}` ? R : never |
| ตรวจ union ทั้งหมดในครั้งเดียว; T เปลือย infer ทีละสมาชิก | type El<T> = [T] extends [Array<infer I>] ? I : never |
| เงื่อนไข & แมป |
|---|
| เลือกประเภทตามว่า T assign ให้ U ได้หรือไม่ | type IsStr<T> = T extends string ? true : false |
| สร้างประเภทออบเจ็กต์ใหม่โดยแปลงทุกคีย์ของ T | type Frozen<T> = { [K in keyof T]: Readonly<T[K]> } |
| ออบเจ็กต์ที่คีย์เป็น K และค่าเป็น V | type Scores = Record<string, number> |
| generic ในตัวที่ได้จากรูปแบบข้างต้น | type Preview = Pick<User, "id" | "name"> |
| T เปลือยก่อน extends รันทีละสมาชิกของ union แล้วรวมผลลัพธ์เข้าด้วยกัน | ToArray<'a' | 'b'> = 'a'[] | 'b'[] |
| เพิ่มหรือลบ modifier บนคีย์ที่แมป | type Req<T> = { [K in keyof T]-?: T[K] } |
| คีย์ของค่า runtime ในรูปของประเภท | const opts = { a: 1 }; type K = keyof typeof opts |
| สร้างประเภทสตริงจากประเภทสตริงอื่น | type Route = `/users/${string}` |
| ต่อประเภท tuple หัวท้ายเข้าด้วยกัน | type Concat<T extends unknown[], U extends unknown[]> = [...T, ...U] |
| ประเภทที่นิยามอ้างถึงตัวมันเอง | type Json = string | number | Json[] | { [k: string]: Json } |
| ตรวจค่ากับประเภทและคง literal type ที่แคบกว่าของมันไว้ | const c = { dark: "#000" } satisfies Record<string, string> |
| คง literal type ที่ผู้เรียกส่งมาแทนที่จะขยายมัน (TS 5.0) | function first<const T>(xs: readonly T[]): T |