TS工具类型

126 阅读1分钟

Partial

将全部属性变成可选

type User = {
  id: number,
  name: string
}

const jack: Partial<User> = {
  name: 'jack'
}

Required

将全部属性变为必选

type User = {
  id?: number,
  name?: string
}

const jack: Required<User> = { // ❌报错: 没有id
  name: 'jack',
}

Readonly

所有属性只能读不能修改

type User = {
  id?: number,
  name?: string
}

const jack: Readonly<User> = {
  name: 'jack'
}

jack.name = 'tom' // ❌报错: 不能修改

Pick

提取部分属性

type User = {
  id?: number,
  name?: string,
  age: number
}
// 只要 name 和 age 属性
type User2 = Pick<User, 'name' | 'age' >

Omit

去掉一些属性

type User = {
  id?: number,
  name?: string,
  age: number
}
// 去掉 name 和 age 属性
type User2 = Omit<User, 'name' | 'age' >

Exclude/Extract

  • 类似于 Pick/Omit
  • Exclude/Extract只能处理基本数据类型
  • Pick/Omit 只能处理引用类型
type A = number | string | boolean | null
// 去掉 
type User2 = Exclude<A, string | number > // boolean | null
// 提取
type User3 = Extract<A, string | null> // string | null

ReturnType

获取一个函数的返回类型

function fn() {
  return 'aaa'
}

type F = ReturnType<typeof fn> // string