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

相关文章:

  • 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 源码编译指南
  • 持续8年仍难终了的纠纷:败诉方因拒执罪被立案,胜诉方银行账户遭冻结
  • 线下哪些商家支持无理由退货?查询方法公布
  • 金价大跌!足金饰品每克一夜便宜14元,涨势是否已终结?
  • A股高开高走:沪指涨0.82%,创指涨2.63%,超4100股收涨
  • 重庆荣昌出圈背后:把网络流量变成经济发展的增量
  • 习近平会见斯洛伐克总理菲佐