AAIWORLD
Blog

TypeScript 类型体操:从入门到放弃

探讨 TypeScript 高级类型的使用技巧,包括条件类型、模板字面量类型和映射类型。

TypeScript 类型体操:从入门到放弃
TypeScript最佳实践

条件类型(Conditional Types)

条件类型是 TypeScript 中非常强大的特性,允许我们根据类型关系创建新类型:

// 基础语法
type IsString<T> = T extends string ? true : false

// 使用
type A = IsString<"hello"> // true
type B = IsString<42>       // false

常用内置条件类型

  • Exclude<T, U> — 从 T 中排除可分配给 U 的类型
  • Extract<T, U> — 从 T 中提取可分配给 U 的类型
  • NonNullable<T> — 从 T 中排除 null 和 undefined
  • ReturnType<T> — 获取函数返回类型

模板字面量类型

TypeScript 4.1 引入的模板字面量类型让我们可以在类型层面操作字符串:

type EventName<T extends string> = `on${Capitalize<T>}`

// 'onClick' | 'onChange' | 'onFocus'
type UIEvent = EventName<"click" | "change" | "focus">

映射类型

// 将所有属性变为可选的
type Partial<T> = {
  [K in keyof T]?: T[K]
}

// 将所有属性变为只读的
type Readonly<T> = {
  readonly [K in keyof T]: T[K]
}

实用建议

类型体操很有趣,但在生产代码中,保持类型定义简洁易懂更为重要。不要为了炫技而写出难以维护的类型代码。

分享到: