TypeScript细碎知识点:常见内置的类型工具
一、内置的类型工具
1. 适用于 interface 的类型操作符
这些操作符主要用于处理对象类型,比如 interface 和对象字面量类型 { key: value }。它们通常用于修改、选取或排除对象的属性。
🐡 Partial<T>:将对象类型T的所有属性设为可选。
interface User { id: number; name: string; } type PartialUser = Partial<User>; // { id?: number; name?: string; }
🐡 Required<T>:将对象类型T的所有属性设为必填。
type RequiredUser = Required<PartialUser>; // { id: number; name: string; }
🐡 Readonly<T>:将对象类型T的所有属性设为只读。
type ReadonlyUser = Readonly<User>; // { readonly id: number; readonly name: string; }
🐡 Pick<T, K>:从对象类型T中选择部分属性K,生成一个新类型。
type UserNameOnly = Pick<User, "name">; // { name: string; }
🐡 Omit<T, K>:从对象类型T中排除属性K,生成一个新类型。
type UserWithoutId = Omit<User, "id">; // { name: string; }
🐡 Record<K, T>:创建一个以联合类型K作为键,T作为值的对象类型。常用于将一组键映射到相同的值类型。
type UserRoles = "admin" | "user" | "guest"; type RolePermissions = Record<UserRoles, boolean>; // { admin: boolean; user: boolean; guest: boolean; }
🐡 ThisType<T>:指定对象字面量中this的类型,常在对象方法中使用。
interface MyObject { data: number; increment(this: MyObject): void; }
2. 适用于联合类型的类型操作符
这些操作符主要用于处理联合类型,帮助从联合类型中提取或排除某些类型成员。
🐡 Exclude<T, U>:从联合类型T中排除所有可以赋值给U的类型。
type AllTypes = "a" | "b" | "c"; type ExcludeA = Exclude<AllTypes, "a">; // "b" | "c"
🐡 Extract<T, U>:从联合类型T中提取所有可以赋值给U的类型。
type CommonType = Extract<AllTypes, "a" | "d">; // "a"
🐡 NonNullable<T>:从类型T中排除null和undefined。
type PossibleValues = string | number | null | undefined; type NonNullValues = NonNullable<PossibleValues>; // string | number
3. 适用于函数类型的操作符
这些操作符用于提取和操作函数类型的参数、返回值、实例类型等。
🐡 Parameters<T>:获取函数类型T的参数类型,返回一个元组类型。
type Func = (a: number, b: string) => void; type FuncParams = Parameters<Func>; // [number, string]
🐡 ConstructorParameters<T>:获取构造函数类型T的参数类型,返回一个元组类型。
type PersonConstructorParams = ConstructorParameters<typeof Person>; // [string, number]
🐡 ReturnType<T>:获取函数类型T的返回类型。
type FuncReturn = ReturnType<Func>; // void
🐡 InstanceType<T>:获取构造函数类型T的实例类型。
type PersonInstance = InstanceType<typeof Person>; // Person
4. 适用于字符串类型的操作符
这些操作符可以对字符串字面量类型进行格式转换。
🐡 Uppercase<S>:将字符串字面量类型S转换为大写。
type Greeting = "hello"; type UpperGreeting = Uppercase<Greeting>; // "HELLO"
🐡 Lowercase<S>:将字符串字面量类型S转换为小写。
🐡 Capitalize<S>:将字符串字面量类型S的首字母大写。
🐡 Uncapitalize<S>:将字符串字面量类型S的首字母小写。
二、总结
- 对象类型 (
interface) 操作符:Partial、Required、Readonly、Pick、Omit、Record、ThisType。 - 联合类型操作符:
Exclude、Extract、NonNullable。 - 函数类型操作符:
Parameters、ConstructorParameters、ReturnType、InstanceType。 - 字符串类型操作符:
Uppercase、Lowercase、Capitalize、Uncapitalize。
浙公网安备 33010602011771号