
TypeScript 类型体操:从入门到放弃
类型体操是什么?
TypeScript 的类型系统是图灵完备的 —— 也就是说你可以用类型写程序。 这被称为「类型体操」。有用吗?有时候有。好玩吗?那必须的。
一个简单的例子:Pick
TypeScript 内置的 Pick<T, K> 从 T 中选取某些属性:
type User = {
id: number;
name: string;
email: string;
};
type UserBasic = Pick<User, 'id' | 'name'>;
// { id: number; name: string; }
自己实现一个
type MyPick<T, K extends keyof T> = {
[P in K]: T[P];
};
条件类型 + infer
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type Fn = (x: number) => string;
type Result = ReturnType<Fn>; // string
什么时候不要用类型体操?
当你同事需要看懂你的代码的时候。杂鱼都看得懂的类型才是好类型 w
不然等你半年后回来看自己写了啥:
// 这啥?我当初在想什么?
type What = SomeCrazyInferNestedConditional<Stuff>;
适度健身有益健康,过度健身…… 你懂的。