当前位置: 首页 > 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.xdnf.cn/news/396415.html

相关文章:

  • HVV面试题汇总合集
  • 万字了解什么是微前端???
  • 滑动窗口:穿越数据的时光机
  • YOLOv11与Roboflow数据集使用全攻略
  • Linux : 31个普通信号含义
  • LlamaIndex 第七篇 结构化数据提取
  • Java常用类-String三剑客
  • 不换设备秒通信,PROFINET转Ethercat网关混合生产线集成配置详解
  • iVX:图形化编程与组件化的强强联合
  • CSS 盒子模型与元素定位
  • 汽车诊断简介
  • 【Linux高级全栈开发】2.1高性能网络-网络编程——2.1.1 网络IO与IO多路复用——select/poll/epoll
  • 1、虚拟人物角色聊天 AI Agent 设计方案
  • FME处理未知或动态结构教程
  • FPGA生成随机数的方法
  • 2505d,d的一些疑问
  • all-in-one方式安装kubersphere时报端口连接失败
  • C++.变量与数据类型
  • 单片机调用printf概率性跑飞解决方法
  • Go语言实现分布式锁:从原理到实践的全面指南
  • 网络编程(一)网络编程入门
  • LLMs之Mistral Medium 3:Mistral Medium 3的简介、安装和使用方法、案例应用之详细攻略
  • 使用 Java 反射打印和操作类信息
  • Typora输入文字卡顿的问题(原因过长上万字)
  • Spyglass:默认配置文件
  • VMware安装CentOS Stream10
  • ArtStation APP:全球艺术家的创作与交流平台
  • 九、STM32入门学习之WIFI模块(ESP32C3)
  • 轻量级高性能推理引擎MNN 学习笔记 01.初识MNN
  • 跟我学c++高级篇——模板元编程之十三处理逻辑