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>;

适度健身有益健康,过度健身…… 你懂的。