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) 操作符:PartialRequiredReadonlyPickOmitRecordThisType
  • 联合类型操作符:ExcludeExtractNonNullable
  • 函数类型操作符:ParametersConstructorParametersReturnTypeInstanceType
  • 字符串类型操作符:UppercaseLowercaseCapitalizeUncapitalize

posted on 2024-11-13 19:42  梁飞宇  阅读(93)  评论(0)    收藏  举报