TypeScript 进阶实战
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/typescript-advanced-sh-497uh4 技能。
技能介绍
你在 TypeScript 项目里反复踩的那些坑
接手一个中大型 TypeScript 项目,最常见的问题不是“类型没写”,而是类型写得太松或太绕:外部接口返回的数据直接标成 any 就往下传;状态机里 status 字段一会儿是字符串字面量,一会儿又是枚举,switch 分支永远写不全;为了让一个泛型函数“万能”,给它套了三层 extends,半年后没人敢动。
这些写法短期内能跑,长期代价是重构时编译器帮不上忙、运行时错误推迟到线上才暴露、新人读类型签名要猜半天。
这个技能解决什么
它把一组被反复验证的类型实践整理成可对照执行的清单,覆盖六个核心方向:
- 泛型约束:用
extends给泛型加上边界,避免T被当成any随意滥用 - 条件类型与映射类型:根据输入推导输出形态,比如从接口响应推导表单模型
- 可辨识联合:给状态和 Result 类型加一个字面量判别字段,让
switch具备穷尽性检查 - 类型守卫:用
typeof、in或自定义谓词在运行时校验数据,替代不安全的as断言 - 工具类型组合:优先用
Pick、Omit、Partial、Readonly派生类型,而不是手写一份重复的 interface - 模板字面量类型:对字符串模式做类型层面的约束,比如
"${string}-${string}"
反模式与检查项
技能明确列出了五类要避免的写法,其中包括:对不确定类型的外部数据用 any 而不是 unknown;在类型守卫更安全的场景下使用 as 断言;用 enum 表达其实字符串字面量联合就够了的场景;以及在 tsconfig 中忽略 strictNullChecks。
同时提供一份可直接勾选的清单,第一条就是 strict: true 必须在 tsconfig 中开启,后续条目覆盖外部数据落地、运行时校验、状态建模、泛型边界与类型派生等关键环节。
适用边界
这份清单的价值取决于你是否真的打开严格模式。如果项目还停留在 strict: false 的状态,类型守卫和穷尽性检查的收益会大打折扣。另外,模板字面量类型在需要拼装复杂命名(如路由路径、事件名)时很实用,但不适合用来描述深层嵌套的数据结构——那种场景用映射类型加递归类型更合适。
它不是一份“万能类型手册”,而是一套让编译器真正参与设计的约束清单。
使用场景
- 重构前端状态管理时,用可辨识联合建模状态机,配合 switch 穷尽性检查防止遗漏分支
- 对接第三方 API 时,用 unknown 承接外部数据,再通过类型守卫在边界完成运行时校验
- 设计 SDK 或工具库的公共泛型签名时,用 extends 施加约束,避免 T 退化为 any
- 梳理表单与接口字段映射关系时,用 Pick、Omit、Partial 等工具类型派生模型,减少重复定义
适合人员
- 前端工程师:要在状态机和异步流程里建立可靠且可推导的类型模型
- Node.js 后端或 BFF 开发者:需要在接口边界安全解析外部数据,阻断运行时风险
- 共享工具库维护者:要设计可复用的泛型签名和工具类型组合,供团队长期使用
- TypeScript 技术负责人:要统一严格模式与类型实践规范,并为现有代码制定整改清单