TypeScript中内置的工具类型
Record
将对象属性的值转换为 T 类型
Record<K extends keyof any, T>
type Property = 'user1' | 'user2'
type User = Record<Property, string>
let user: User = {
user1: '',
user2: ''
}
Readonly
将对象或者数组的属性转换成只读的
Record<K extends keyof any, T>
interface User {
name: string
age: number
gender?: string
}
let u: User = {
name: 'name',
age: 20
}
u.name = 'new name' // 没有使用 Readonly,可以正常给变量属性赋值
let u: Readonly<User> = {
name: 'name',
age: 20
}
u.name = 'new name' // 使用 Readonly 之后,给变量属性赋值就会报错,error:'无法为“name”赋值,因为它是只读属性'
Required
将类型的所有属性变成必选
interface User {
name: string
age: number
gender?: string
}
// 使用 Required 之后会报错,因为他将属性 "gender" 变成必选
// error:类型 "{ name: string; age: number; }" 中缺少属性 "gender",但类型 "Required<User>" 中需要该属性。
let u: Required<User> = {
name: 'name',
age: 20,
}
Partial
与 Required 相反,Partial 将类型的所有属性变成可选
interface User {
name: string
age: number
gender: string
}
// 正常情况下我们这样写,会提示缺少必要的属性"gender"
let u: User = {
name: 'name',
age: 20,
}
// 使用 Partial 后,User类型的所有属性变成可选
let u: Partial<User> = {
name: 'name',
age: 20,
}
Extract
提取联合类型中的某些类型
Extract< T, U > 表示从 T 中提取 U
type Ex = string | number
// 从联合类型Ex中,提取 string 类型
type U = Extract<Ex, string> // string
let u: U = '字符串'
Exclude
从联合类型中移除某些类型
Exclude<T,U> 表示从 T 中移除 U
type Ex = string | number
// 从联合类型Ex中,移除 number 类型
type U = Exclude<Ex, number> // string
let u: U = '字符串'
Pick
从类型中挑出一些属性
interface User {
name: string
age: number
gender: string
}
type U = Pick<User, 'name' | 'age'> // { name: string; age: number }
let user: U = {
name: 'name',
age: 22
}
Omit
从类型中移除一些属性
interface User {
name: string
age: number
gender: string
}
type U = Omit<User, 'name' | 'age'> // { gender: string }
let user: U = {
gender: '男'
}
NonNullable
去除类型中的 null 和 undefined
type U = NonNullable<string | number[] | null | undefined> // string | number[]
ReturnType
获取函数的返回值类型
interface User {
name: string
}
type Func = (a: string) => User
type U = ReturnType<Func> // U = User
let u: U = {
name: '字符串'
}