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

TS类型操作工具汇总

TypeScript 提供了一套强大的类型操作工具,可以帮助我们创建复杂的类型系统

基础类型工具

Partial<T> :将所有属性变为可选

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

Required<T>:将所有属性变为必需

type RequiredUser = Required<PartialUser>;  // 恢复为原始User类型

Readonly<T>:将所有属性变为只读

type ReadonlyUser = Readonly<User>;

结构操作工具

Pick<T, K>:选择部分属性

type NameOnly = Pick<User, 'name'>;  // { name: string }

Omit<T, K>:排除部分属性

type WithoutAge = Omit<User, 'age'>;  // { name: string }

Record<K, T>:创建键值类型

type UserMap = Record<string, User>;  // { [key: string]: User }

联合类型工具

Exclude<T, U>:从T中排除U

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

Extract<T, U>:提取T中符合U的类型

type Result = Extract<T, 'a' | 'd'>;  // 'a'

NonNullable<T>:排除null和undefined

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

函数类型工具

Parameters<T>:获取函数参数类型

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

ReturnType<T>:获取函数返回值类型

type Ret = ReturnType<Fn>;  // void

ConstructorParameters<T>:获取构造函数参数类型:

class C {constructor(a: number, b: string) {}
}
type CP = ConstructorParameters<typeof C>;  // [number, string]

高级类型操作

条件类型

type IsString<T> = T extends string ? true : false;
type A = IsString<'hello'>;  // true
type B = IsString<123>;      // false

映射类型

type Getters<T> = {[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K];
};
type UserGetters = Getters<User>;
// { getName: () => string; getAge: () => number; }

模板字面量类型

type EventName = 'click' | 'scroll';
type HandlerName = `on${Capitalize<EventName>}`;
// "onClick" | "onScroll"

实用工具类型

Awaited<T>:解开Promise类型

type P = Promise<string>;
type Res = Awaited<P>;  // string

ThisParameterType<T>:获取函数的this参数类型

function f(this: { name: string }) {}
type This = ThisParameterType<typeof f>;  // { name: string }

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

相关文章:

  • switch-case 巧妙使用(case穿透)
  • InfluxDB-数据看板实现流程:从数据采集到可视化展示
  • Spring Boot 自动装配原理详解
  • Cascadeur2025如何无限制导出FBX文件
  • 无偿帮写服务器配置|限时30天|名额100
  • 聊聊JetCache的CachePenetrationProtect
  • Xianyu AutoAgent,AI闲鱼客服机器人
  • 深度学习的相关术语介绍(杂乱版-想到啥介绍啥)
  • uniapp-商城-56-后台 新增商品(弹窗属性继续分析)
  • UDP--DDR--SFP,FPGA实现之指令监测模块实现
  • 专题二:二叉树的深度搜素(二叉树的所有路径)重点理解回溯算法的”恢复现场“
  • 在VSCode中接入DeepSeek的指南
  • 携固态电池、新形态钢壳叠片电池等产品 豪鹏科技将亮相CIBF 2025
  • 【HarmonyOS】ArkTS开发应用的横竖屏切换
  • 智能工厂MES系统示例
  • Java大师成长计划之第21天:Spring Boot快速入门
  • TCP协议十大核心特性深度解析:构建可靠传输的基石
  • c语言第一个小游戏:贪吃蛇小游戏08(贪吃蛇完结)
  • ros2-node
  • Win11 + Visual Studio 2022 + FLTK 1.4.3 + Gmsh 4.13.1 源码编译指南
  • Ubuntu 18.04.6下OpenSSL与OpenSSH版本升级
  • 2025-05-13 Unity 网络基础12——大小端模式
  • 项目中遇到的问题
  • WSL 安装 Debian 12 后,Linux 如何安装 vim ?
  • AI时代,如何实现人机共舞?
  • 计算机网络防火墙技术介绍:包过滤、应用代理网关、状态监测
  • c# 数据结构 树篇 入门树与二叉树的一切
  • 最大子段和(递推)
  • 物理:人的记忆是由基本粒子构成的吗?
  • 【AI News | 20250513】每日AI进展