Các utility type có sẵn của TypeScript cùng các từ khóa đi kèm, nhóm theo công việc: định hình lại object, lọc union, mô tả hàm, biến đổi string literal, và bắt kiểu từ giá trị. Mỗi dòng cho thấy kiểu và một alias mà bạn thực sự viết.
Utility type là hàm generic cho kiểu: chúng nhận vào một hoặc hai kiểu rồi trả về kiểu mới, nên bạn không phải viết tay từng hình dạng. Chúng tỏa sáng với kiểu dẫn xuất, khi nguồn sự thật là một kiểu khác hoặc một giá trị và bạn muốn kiểu của mình tự động theo dõi nó. Nguyên tắc chung là dẫn xuất thay vì nhân bản: đổi nguồn thì kiểu dẫn xuất theo ngay.
Bảng tham chiếu · 22 mục
Utility types trong TypeScriptExplained
22 of 22 rows
Hình dạng object
T với mọi thuộc tính thành optional.
type Update = Partial<User>
T với mọi thuộc tính thành bắt buộc.
type Strict = Required<Opts>
T với mọi thuộc tính thành readonly.
type Frozen = Readonly<User>
T chỉ giữ các key trong K.
type Preview = Pick<User, "id" | "name">
T bỏ đi các key trong K.
type SafeUser = Omit<User, "password">
Object có key là K và value là V.
type Scores = Record<string, number>
Lọc union
Union U đã bỏ các thành viên gán được cho X.
type NoNull = Exclude<T, null>
Các thành viên của U gán được cho X.
type OnlyStr = Extract<T, string>
T đã bỏ null và undefined.
type Def = NonNullable<T>
Kiểu hàm
Tuple gồm các kiểu tham số của hàm F.
type P = Parameters<typeof fn>
Kiểu mà hàm F trả về.
type R = ReturnType<typeof fn>
Tuple gồm các kiểu tham số của constructor F.
type C = ConstructorParameters<typeof Date>
Kiểu instance mà constructor F tạo ra.
type D = InstanceType<typeof Date>
Kiểu mà Promise resolve tới, một cách đệ quy.
type Data = Awaited<Promise<User>>
Biến đổi string literal
String literal S ở dạng chữ in hoa.
type A = Uppercase<"abc"> // "ABC"
String literal S ở dạng chữ thường.
type B = Lowercase<"ABC"> // "abc"
S với ký tự đầu ở dạng in hoa.
type C = Capitalize<"abc"> // "Abc"
S với ký tự đầu ở dạng chữ thường.
type D = Uncapitalize<"Abc"> // "aBc"
Từ khóa liên quan
Union gồm các key của kiểu object T.
type K = keyof User
Kiểu của một giá trị, không cần viết lại.
type Config = typeof defaults
Bắt một kiểu bên trong conditional để dùng lại.
type El<T> = T extends Array<infer I> ? I : never
Chọn kiểu X hay Y tùy theo T có gán được cho U hay không.