FumadocsZDecode
Typescript

常用内置类型

Partial<T>

把所有属性变成可选

type User = {
  name: string
  age: number
}

type PartialUser = Partial<User>
// 等价于: { name?: string; age?: number }

Required<T>

把所有属性变成必填

type User = {
  name?: string
  age?: number
}

type FullUser = Required<User>
// { name: string; age: number }

Readonly<T>

把所有属性变成只读

type User = {
  name: string
}

const u: Readonly<User> = { name: 'Tom' }
u.name = 'Jerry' // ❌ 报错,name 是只读的

Pick<T, K>

从 T 中挑选某些属性组成新类型

type User = {
  name: string
  age: number
  email: string
}

type BasicInfo = Pick<User, 'name' | 'email'>
// { name: string; email: string }

Omit<T, K>

从 T 中移除某些属性组成新类型

type User = {
  name: string
  age: number
  email: string
}

type NoEmail = Omit<User, 'email'>
// { name: string; age: number }

Record<K, T>

构造一个键值对类型

type Roles = 'admin' | 'user' | 'guest'

type RolePermissions = Record<Roles, boolean>
// 等价于:{ admin: boolean; user: boolean; guest: boolean }

Exclude<T, U>

从 T 中排除 U 的类型

type T = Exclude<'a' | 'b' | 'c', 'a'>
// 'b' | 'c'

Extract<T, U>

从 T 中提取 U 的类型

type T = Extract<'a' | 'b' | 'c', 'a' | 'b'>
// 'a' | 'b'

NonNullable<T>

移除 null 和 undefined

type T = NonNullable<string | null | undefined>
// string

ReturnType<T>

获取函数返回值类型

function getUser() {
  return { name: 'Tom', age: 25 }
}

type User = ReturnType<typeof getUser>
// { name: string; age: number }

On this page