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

6. Typescript 类型体操

Typescript 类型体操

用发布订阅模式解耦

const eventNames = ['API:UN_AUTH', 'API:INVALID']
type EventNames = (typeof eventNames)[number]class EventEmitter {private listeners: Record<string, Set<Function>> = {'API:UN_AUTH': new Set(),'API:INVALID': new Set()}on(eventName: EventNames, listener: Function) {this.listeners[eventName].add(listener)}emit(eventName: EventNames, ...args: any[]) {this.listeners[eventName].forEach((listener) => listener(...args))}
}export default new EventEmitter()

前置的不定量参数(类型标注)

type JSTypeMap = {string: stringnumber: numberboolean: booleanundefined: undefinedobject: objectsymbol: symbolbigint: bigintnull: null
}type JSTypeNames = keyof JSTypeMaptype ArgsType<T extends JSTypeNames[]> = {[I in keyof T]: JSTypeMap[T[I]]
}declare function addImpl<T extends JSTypeNames[]>(...args: [...T, (...args: ArgsType<T>) => any]): void

不可变类型

type DeepReadonly = {readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P]
}interface Obj {a: numberb: string
}
// Readonly 浅的不可变类型
let obj: Readonly<Obj> = {a: 1,b: '2'
}

使用元祖生成联合类型

const colors = ['♥', '♦', '♣', '♠'] as const
const values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] as const
type Color = (typeof colors)[number]
type Value = (typeof values)[number]
http://www.dtcms.com/a/395081.html

相关文章:

  • [C++:类的默认成员函数——Lesson7.const成员函数]
  • 园区3D可视化数字孪生管理平台与 IBMS 智能化集成系统:打造智慧园区新范式​
  • 【Javaweb】Restful开发规范
  • 【C++】深入理解const 成员函数
  • 使用vscode自带指令查找有问题的插件
  • JAVA算法练习题day18
  • springboot3 exception 全局异常处理入门与实战
  • spring简单入门和项目创建
  • lVS 负载均衡技术
  • 【论文阅读】OpenDriveVLA:基于大型视觉语言动作模型的端到端自动驾驶
  • Redis 缓存更新策略与热点数据识别
  • 新手小白——Oracle新建表完成题目
  • 如何让百度快速收录网页如何让百度快速收录网页的方法
  • Bugku-1和0的故事
  • 微硕WINSOK N+P MOSFET WSD3067DN56,优化汽车智能雨刷系统
  • DeviceNet 转 Profinet:西门子 S7 - 1500 PLC 与欧姆龙伺服电机在汽车焊装生产线夹具快速切换定位的通讯配置案例
  • 探索鸿蒙应用开发:构建一个简单的音乐播放器
  • 人脸识别(具体版)
  • 4.10 顶点光源
  • 深度学习---PyTorch 神经网络工具箱
  • 第九篇:静态断言:static_assert进行编译期检查
  • 第10讲 机器学习实施流程
  • tablesample函数介绍
  • 机器学习-单因子线性回归
  • android pdf框架-14,mupdf重排
  • 借助VL模型实现一个简易的pdf书签生成工具
  • 78-数据可视化-折线图
  • 静默安装 Oracle Database 21c on CentOS 7.9
  • DINOv3详解+实际下游任务模型使用细节(分割,深度,分类)+ Lora使用+DINOv1至v3区别变换分析(可辅助组会)
  • Linux编译SRS并测试RTMP流