当前位置: 首页 > 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'

http://www.dtcms.com/a/185013.html

相关文章:

  • 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节点启动全解析
  • 深度解析大模型学习率:优化策略与挑战
  • Linux-Ext系列文件系统
  • 【仿真】【具身智能仿真】Isaac Simlab云端部署(入门学习性价比最高的方式)
  • 广东省省考备考(第八天5.11)—言语:片段阅读(每日一练)
  • 【python编程从入门到到实践】第六章 字典
  • httpclient请求出现403
  • CAPL -实现SPRMIB功能验证
  • 数据库备份与策略【全量备份、增量备份、日志恢复】
  • Kubernetes排错(十三):Pod间偶发超时问题排查
  • NOR Flash与NAND Flash详解