TypeScript 6.0 前几天正式发布了,这次改动不少,但最让我兴奋的是 const type parameters(常量类型参数)的 GA。
1. const type parameters — 终于不用手动写 as const 了
之前写泛型工具函数的时候,经常要这样:
const config = { mode: 'strict', retries: 3 } as const;
type T = Resolve<typeof config>;
TS6 之后可以直接推断出字面量类型,不需要额外的 as const。这对写配置校验、表单验证这类工具库来说是个大解脱。
2. 模式匹配提案进展
虽然还没进标准,但 TS 团队已经在实验性支持 switch 的模式匹配语法了。用 discriminant union + pattern matching 替代冗长的 if-else 链,代码可读性提升很明显。
3. NoInfer 工具类型
这个很有意思——NoInfer<T> 可以阻止编译器对某个泛型参数做自动推断。之前遇到一个坑:
function merge<A, B>(a: A, b: B): A & B { ... }
// 调用时 a 的类型被推断为 object 而不是具体类型
用 NoInfer 可以精确控制推断行为,对写复杂工具类型的库来说很实用。
4. 性能提升
官方说编译速度提升了约 20%,主要优化了类型检查的缓存策略。我们项目从 TS5 升到 6 之后,增量构建确实快了不少。
大家升级到 6 了吗?有没有遇到什么兼容性问题或者惊喜?个人感觉这次更新对大型项目的维护友好度提升挺明显的。