跳到正文

我所理解的 TypeScript 最佳实践

写 TypeScript 时,我通常让编译器推断局部变量和简单函数的返回值。到了接口、组件 props、模块导出这些边界,我会把约定写得更清楚:数据从哪里来,哪些字段可能缺失,调用方可以传什么。类型本身也有边界,外部数据需要在运行时校验,工具脚本则需要一条确实会执行的检查命令。

由于篇幅问题,全文分成六部分来讲。

第一篇《为什么选择 TypeScript》从浏览器脚本、Ajax 和 Node.js 讲起,沿着 JSDoc、Flow、Angular、VS Code 和声明生态的演进,解释为什么连构建脚本、测试和插件也适合纳入 TypeScript 检查。

第二篇《严格模式》从查不到数据却直接访问属性的问题讲起,解释严格模式的来历,逐项对照八项检查和修复示例,再给出新项目配置与旧项目的迁移路径。

第三篇《状态、映射与泛型》用审核状态区分枚举值、文案映射和展示顺序,再用 Vue 泛型组件和有序选择列表解释怎样保留输入与输出的关系。

第四篇《模块边界与 TypeScript 脚本》对比 tsx、ts-node 和 Node 原生执行,说明为什么仓库内用 tsx、独立打包的 Node 工具交付 JavaScript,再介绍浏览器、Worker 和构建工具怎样加载各自的入口。

第五篇《类型检查、Lint 与测试》把 Prettier、类型检查、ESLint 和测试放进日常检查流程,说明怎样拦截新增的 JS 源文件,以及升级时为什么要分别验证 tsc 命令和工具依赖的编译器 API。

第六篇《TypeScript 7 升级与工具链兼容》区分 TypeScript 7 的命令行编译器和新 API,说明 7.1 Beta 改了什么、ESLint 与 Vue 检查器为什么还要分别验证,并保留并行安装的配置和实测。