← 返回博客
TypeScript 类型体操:从入门到精通
1 分钟#TypeScript#编程
"类型体操"常被当成炫技,但它真正的价值是:让非法状态在编译期就无法表达。下面用几个小例子说明。
条件类型:按输入决定输出
type Awaited<T> = T extends Promise<infer U> ? U : T;
type A = Awaited<Promise<string>>; // string
type B = Awaited<number>; // number
infer 让我们"抓住"类型里的某一部分。它是类型体操里最常用的工具。
映射类型:批量改造
type Mutable<T> = {
-readonly [K in keyof T]: T[K];
};
-readonly 去掉只读修饰,-? 去掉可选。映射类型让你基于已有类型生成新类型,而不是手写一遍。
什么时候该收手
类型体操是有成本的:太复杂的类型会拖慢编辑器、吓退后来者。我的判断标准很简单:
- 如果它帮调用方少犯错,值得
- 如果它只是让我显得聪明,删掉
好的类型像好的注释——存在感越低,价值越高。