泛型工具 
Partial<T> 
把所有属性变为 可选。
ts
interface User {
  id: number
  name: string
}
type UserPartial = Partial<User>
// { id?: number; name?: string }Required<T> 
把所有属性变为 必填。
ts
interface User {
  id?: number
  name?: string
}
type UserRequired = Required<User>
// { id: number; name: string }Readonly<T> 
把所有属性变为 只读。
ts
interface User {
  id: number
  name: string
}
type UserReadonly = Readonly<User>
// { readonly id: number; readonly name: string }Pick<T,K> 
- 从类型 T 中挑选出某些键。 
- K支持联合类型 
ts
interface User {
  id: number
  name: string
  age: number
}
type UserPreview = Pick<User, 'id' | 'name'>
// { id: number; name: string }Exclude<T, U> 
在 联合类型,排除掉某些 类型分支。
ts
type A = 'a' | 'b' | 'c'
type B = Exclude<A, 'a'>
// 'b' | 'c'Omit<T,K> 
- 在 对象类型,排除掉某些 属性键。 
- K支持传入联合类型,表示排除多个键 
ts
interface User {
  id: number
  name: string
  age: number
  email: string
}
// 排除单个键
type UserWithoutAge = Omit<User, 'age'>
// { id: number; name: string; email: string }
// 排除多个键
type UserWithoutAgeAndEmail = Omit<User, 'age' | 'email'>
// { id: number; name: string }Record<K,T> 
- 生成一个以 K 为 key,T 为 value 的对象类型。 
- T支持联合类型 
ts
type Role = 'admin' | 'user'
type RoleMap = Record<Role, number>
// { admin: number; user: number }ReturnType<T> 
获取函数返回值类型。
ts
function foo() {
  return { id: 1, name: 'ts' }
}
type FooReturn = ReturnType<typeof foo>
// { id: number; name: string }Optional<T,K> 
Optional在TS中并没有内置,但比较常用,实现如下:
ts
interface Person {
  name: string
  age: number
  sex: string
}
type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
type OptionalPerson = Optional<Person, 'age' | 'sex'>
const p: OptionalPerson = {
  name: '张三',
}
console.log('[ p ] >', p)ArrayLike<T> 
ts
interface ArrayLike<T> {
  readonly length: number;
  [key: number]: T;
}