TypeScript类型体操

刚开始接触类型体操的时候,看到那些复杂的条件类型和映射类型,整个人都是懵的。但当你真正理解了其中的门道,就会发现这玩意儿是真的有意思。就像在解数学题,又像是在玩拼图,每一个类型操作都像是在完成一个精巧的逻辑构建。

基础热身:从泛型约束开始

先来看个简单的例子。假设我们要实现一个获取对象属性值的函数,但要求属性名必须是对象实际存在的键:

这里的就是类型体操的入门动作 - 泛型约束。它确保了第二个参数必须是第一个对象的有效键名。

中级套路:条件类型与infer关键字

条件类型让类型系统具备了动态判断能力,而关键字则能在类型层面进行模式匹配。来看个提取函数返回类型的例子:

这个类型能够推断出任何函数的返回类型。就像是类型层面的变量声明,它捕获了函数返回类型的实际结构。

实战进阶:递归类型与模板字面量类型

TypeScript 4.1引入了模板字面量类型,结合递归类型,能实现一些相当强大的功能。比如我们要实现一个将对象键名转换为驼峰命名的类型:

这个类型递归地处理下划线分隔的字符串,将每个部分首字母大写(除了第一个),然后拼接起来。虽然看起来复杂,但逻辑很清晰:找到下划线,分割字符串,递归处理剩余部分。

深度挑战:联合类型分发与过滤

联合类型在条件类型中会自动分发,这个特性可以用来实现各种过滤操作:

更复杂一点的,我们可以过滤出符合某些条件的类型:

这个类型找出了Person中所有值为string类型的属性名。

实用技巧:类型安全的API设计

在实际项目中,类型体操最大的价值在于保证代码的类型安全。比如设计一个API客户端:

这种设计确保了在编译期就能发现API调用的问题,大大减少了运行时错误。

类型体操确实有学习曲线,但掌握之后带来的类型安全收益是实实在在的。它让TypeScript不再仅仅是JavaScript的类型标注工具,而是真正成为了一种更具表现力的编程语言。不过也要注意,过度复杂的类型体操可能会降低代码可读性,在实际项目中需要权衡利弊。

建议从简单的类型操作开始,逐步深入,多实践多思考。毕竟,类型体操的精髓不在于炫技,而在于写出更健壮、更易维护的代码。

相关推荐
Betterme几秒前
Vue3 竞态请求防护组合式hooks:useLatestRequest 设计思路
前端
_zhourui_h_3 分钟前
一个 [ECS] 到底生成了多少代码?EasyECS 最核心的秘密都在这里
前端
梨想橙汁6 分钟前
Git 分支详解:创建切换、合并分支、冲突解决实战
前端·git
雪芽蓝域zzs7 分钟前
Vue3 defineProps` / `defineEmits` 是编译器宏,不需要手动 import 导入
前端·javascript·vue.js
whyweplay11 分钟前
Elpis:从Json Schema 到 页面
前端·javascript
大牧师1 小时前
Nest.js 微服务入门教程
开发语言·javascript·后端·微服务·node.js·nest.js·nest
做萤石二次开发的哈哈1 小时前
海康班班通交互一体机技能接入实战:ISAPI透传+OTAP双协议封装,Web/App/小程序教学管理应用一站生成
前端·物联网·小程序·交互·萤石开放平台·蓝海aiot一站式工作台·aiot开发
计算机魔术师1 小时前
Anthropic一次性锁死十年算力,5170亿美元买什么
前端
IT_陈寒1 小时前
Redis的订阅丢失消息?你可能忘了这个配置
前端·人工智能·后端
头茬韭菜1 小时前
第 3 篇:「Pydantic 即 Schema」—— 工具生态三层解剖
前端·chrome·ai·openmanus