← 返回文章列表
技术

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