说说 TypeScript 中,有哪些内置的类型方法和工具类型
参考答案:
1. 核心工具类型
TypeScript 自带的一些通用工具类型,用于在类型系统中执行变换操作:
1.1. 映射类型
Partial<T>
将类型T的所有属性变为可选属性。typescripttype User = { name: string; age: number }; type PartialUser = Partial<User>; // { name?: string; age?: number }Required<T>
将类型T的所有属性变为必需属性。typescripttype User = { name?: string; age?: number }; type RequiredUser = Required<User>; // { name: string; age: number }Readonly<T>
将类型T的所有属性变为只读属性。typescripttype User = { name: string; age: number }; type ReadonlyUser = Readonly<User>; // { readonly name: string; readonly age: number }Record<K, T>
构造一个对象类型,其键是类型K的属性,值是类型T。typescripttype Role = "admin" | "user"; type Permissions = Record<Role, boolean>; // { admin: boolean; user: boolean }Pick<T, K>
从类型T中选择指定的属性K,构造新的类型。typescripttype User = { name: string; age: number; address: string }; type UserName = Pick<User, "name">; // { name: string }Omit<T, K>
从类型T中剔除指定的属性K,构造新的类型。typescripttype User = { name: string; age: number; address: string }; type UserWithoutAddress = Omit<User, "address">; // { name: string; age: number }
1.2. 条件类型
Exclude<T, U>
从类型T中剔除可以赋值给U的类型。typescripttype T = "a" | "b" | "c"; type Excluded = Exclude<T, "a">; // "b" | "c"Extract<T, U>
从类型T中提取可以赋值给U的类型。typescripttype T = "a" | "b" | "c"; type Extracted = Extract<T, "a" | "b">; // "a" | "b"NonNullable<T>
移除类型T中的null和undefined。typescripttype T = string | null | undefined; type NonNullableT = NonNullable<T>; // stringReturnType<T>
获取函数T的返回值类型。typescripttype Fn = () => number; type Result = ReturnType<Fn>; // numberInstanceType<T>
获取构造函数类型T的实例类型。typescriptclass User { name = "John"; } type UserInstance = InstanceType<typeof User>; // User
1.3. 工具类型
Parameters<T>
获取函数T的参数类型的元组。typescripttype Fn = (name: string, age: number) => void; type Params = Parameters<Fn>; // [string, number]ConstructorParameters<T>
获取构造函数类型T的参数类型的元组。typescripttype Constructor = new (name: string, age: number) => {}; type Params = ConstructorParameters<Constructor>; // [string, number]ThisParameterType<T>
提取函数类型T的this参数类型。typescriptfunction fn(this: { x: number }, y: number) {} type This = ThisParameterType<typeof fn>; // { x: number }OmitThisParameter<T>
从函数类型T中移除this参数。typescriptfunction fn(this: { x: number }, y: number) {} type Fn = OmitThisParameter<typeof fn>; // (y: number) => void
2. 内置的类型工具
2.1. 基本类型辅助工具
Awaited<T>
获取Promise的解析值类型。typescripttype T = Promise<number>; type Resolved = Awaited<T>; // numberUppercase<S>/Lowercase<S>
转换字符串类型为大写或小写。typescripttype Upper = Uppercase<"hello">; // "HELLO" type Lower = Lowercase<"WORLD">; // "world"Capitalize<S>/Uncapitalize<S>
将字符串类型的首字母变为大写或小写。typescripttype Cap = Capitalize<"hello">; // "Hello" type Uncap = Uncapitalize<"World">; // "world"
题目要点:
TypeScript 内置的类型方法和工具类型非常丰富,主要用于:
- 映射类型(如
Partial、Readonly):操作属性的可选性、只读性等。 - 条件类型(如
Exclude、Extract):从联合类型中筛选或剔除类型。 - 函数工具类型(如
Parameters、ReturnType):获取函数的参数和返回值类型。 - 字符串类型工具(如
Uppercase、Capitalize):对字符串类型进行变换。