TypeScript 类型体操:优雅地驯服复杂类型
2025年1月30日6 分钟阅读
# TypeScript# 类型系统
类型系统的哲学
TypeScript 的类型系统是图灵完备的——这意味着你可以用类型来「编程」。这既是它的魅力所在,也是某些代码让人头疼的原因。
好的类型设计应当是描述性的,而非限制性的。当你感到在与类型系统「搏斗」时,往往意味着是时候重新思考设计了。
条件类型
条件类型让我们可以根据类型关系进行分支:
type IsArray<T> = T extends any[] ? true : false
// IsArray<string[]> → true
// IsArray<string> → false
infer 关键字
infer 可以在条件类型中「推断」类型变量,这是许多工具类型的基础:
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T
模板字面量类型
TypeScript 4.1 引入的模板字面量类型,让字符串类型操作变得异常强大:
type EventName<T extends string> = `on${Capitalize<T>}`
// EventName<'click'> → 'onClick'
// EventName<'change'> → 'onChange'
掌握这些工具类型之后,你会发现类型推导不再是负担,而是一种思维方式的延伸。
← 返回文章列表
— xiaoqianshuo