📚学习·
TypeScript 高级类型体操入门
✦ TypeScript✦ 前端
从 utility types 开始
TypeScript 的 utility types 是真正提升开发体验的利器。Partial<T>、Required<T>、Pick<T, K>、Omit<T, K> 这些内置类型看似简单,但组合起来能解决大部分日常需求。
比如权限系统里,你从后端拿到完整的 User 对象,但注册表单只需要用户名和密码。用 Pick<User, 'username' | 'password'> 一行搞定,不需要手动维护两套类型定义。这种"派生类型"的思维方式,用习惯了就回不去了。
infer 关键字
infer 是条件类型里的一个特殊关键字,用来在类型推导中"提取"某个位置的类型。最经典的例子是实现一个 ReturnType<T>:
这个 infer R 的意思是:在 extends 的匹配过程中,如果 T 确实是 (...args: any[]) => infer R 的模式,就把返回值的类型捕捉到 R 里。初看有点绕,但理解之后会发现这个模式可以套用到各种场景——提取 Promise 的 resolve 类型、提取数组的元素类型、提取函数的参数类型。