当前位置: 首页 > news >正文

TypeScript 中的泛型工具详解

TypeScript 提供了一系列强大的泛型工具类型,可以帮助我们更灵活地操作和转换类型。以下是主要的泛型工具类型及其用法:

1. 基础工具类型

1.1. Partial<T>

将类型 T 的所有属性变为可选。

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

1.2. Required<T>

将类型 T 的所有属性变为必选。

interface PartialUser {name?: string;age?: number;
}type RequiredUser = Required<PartialUser>;
// 等同于 { name: string; age: number; }

1.3. Readonly<T>

将类型 T 的所有属性变为只读。

interface User {name: string;age: number;
}type ReadonlyUser = Readonly<User>;
// 等同于 { readonly name: string; readonly age: number; }

1.4. Record<K,T>

构造一个类型,其属性名为 K 类型,属性值为 T 类型。

type UserRecord = Record<'name' | 'email', string>;
// 等同于 { name: string; email: string; }

1.5. Pick<T,K>

从类型 T 中选取部分属性 K 来构造新类型。

interface User {name: string;age: number;email: string;
}type UserBasicInfo = Pick<User, 'name' | 'email'>;
// 等同于 { name: string; email: string; }

1.6. Omit<T,K>

从类型 T 中排除部分属性 K 来构造新类型。

interface User {name: string;age: number;email: string;
}type UserWithoutAge = Omit<User, 'age'>;
// 等同于 { name: string; email: string; }

2. 条件类型工具

2.1. Exclude<T,U>

从类型 T 中排除可以赋值给 U 的类型。

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

2.2. Extract<T,U>

从类型 T 中提取可以赋值给 U 的类型。

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

2.3. NonNullable<T>

从类型 T 中排除 null 和 undefined

type T = string | number | null | undefined;type Result = NonNullable<T>;  // string | number

3. 函数相关工具

3.1. ReturnType<T>

获取函数类型 T 的返回值类型。

type Fn = () => string;type Result = ReturnType<Fn>;  // string

3.2. Parameters<T>

获取函数类型 T 的参数类型组成的元组类型。

type Fn = (a: number, b: string) => void;type Result = Parameters<Fn>;  // [a: number, b: string]

3.3. ConstructorParameters<T>

获取构造函数类型 T 的参数类型组成的元组类型。

class User {constructor(public name: string, public age: number) {}
}type Result = ConstructorParameters<typeof User>;  // [name: string, age: number]

3.4. InstanceType<T>

获取构造函数类型 T 的实例类型。

class User {name: string;age: number;
}type Result = InstanceType<typeof User>;  // User

4. 其他实用工具

4.1. ThisParameterType<T>

提取函数类型 T 的 this 参数类型。

function toHex(this: Number) {return this.toString(16);
}type Result = ThisParameterType<typeof toHex>;  // Number

4.2. OmitThisParameter<T>

从函数类型 T 中移除 this 参数。

function toHex(this: Number) {return this.toString(16);
}type Result = OmitThisParameter<typeof toHex>;  // () => string

4.3. Awaited<T>

获取 Promise 的解析值类型(递归解包 Promise)。

type T = Promise<Promise<string>>;type Result = Awaited<T>;  // string

5. 字符串操作工具

5.1. Uppercase<T>

将字符串字面量类型转换为大写。

type T = 'hello';type Result = Uppercase<T>;  // 'HELLO'

5.2. Lowercase<T>

将字符串字面量类型转换为小写。

type T = 'HELLO';type Result = Lowercase<T>;  // 'hello'

5.3. Capitalize<T>

将字符串字面量类型的首字母转换为大写。

type T = 'hello';type Result = Capitalize<T>;  // 'Hello'

5.4. Uncapitalize<T>

将字符串字面量类型的首字母转换为小写。

type T = 'Hello';type Result = Uncapitalize<T>;  // 'hello'

相关文章:

  • AI文字识别工具汇总
  • 【Java学习日记36】:javabeen学生系统
  • [思维模式-28]:《本质思考力》-8- 两种相反的构建与解构系统的思维模式:①自顶向下的分解、牵引;②自底向上的堆叠、聚合
  • 将PyQt5设计的程序打包成.exe文件
  • C35-数组和函数开发初见
  • DEEPPOLAR:通过深度学习发明非线性大核极坐标码(2)
  • 从3秒到500ms:一套完整的慢SQL分析与优化的经验
  • 英语听力口语词汇--2.宣传类
  • AVL树解析
  • NPDP.新产品开发职业认证知识体系NPDP.BOK
  • 抽奖系统-基本-注册
  • 元数据和主数据
  • 2918. 数组的最小相等和
  • C++自学笔记 makefile
  • 嵌入式学习笔记 - STM32 ADC,多重转换,内部参考电压,
  • 数据指标和数据标签
  • STM32学习记录——点灯
  • 栈Stack(附源码)
  • linux kernel调度触发机制
  • Kubernetes基础(三十二):Worker节点启动全解析
  • 中国潜水救捞行业协会发布《呵护潜水员职业健康安全宣言》
  • 60余年产业积累,“江苏绿心”金湖炼就“超级石油工具箱”
  • 来伊份深夜回应“粽子中吃出疑似创可贴”:拿到实物后会查明原因
  • 专访|西蒙·斯特朗格:以“辞典”的方式讲述二战家族史
  • 招商蛇口:今年前4个月销售额约498.34亿元
  • 公募基金改革八大要点:建立浮动管理费收取机制、降低规模排名考核权重