# TypeScript 高级类型体操实战指南
TypeScript 的类型系统非常强大,图灵完备的类型系统允许我们在编译时进行复杂的逻辑运算。本文将介绍一些常用的高级类型技巧,助你写出更健壮的代码。
## 条件类型(Conditional Types)
条件类型类似于 JavaScript 中的三元运算符:
```typescript
type IsString<T> = T extends string ? true : false;
```
结合 `infer` 关键字,我们可以提取类型中的一部分:
```typescript
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
```
## 映射类型(Mapped Types)
映射类型允许我们遍历联合类型来创建新类型:
```typescript
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
```
## 模板字面量类型(Template Literal Types)
TypeScript 4.1 引入了模板字面量类型,允许我们操作字符串类型:
```typescript
type EventName<T extends string> = `on${Capitalize<T>}`;
type OnClick = EventName<"click">; // "onClick"
```
## 实战案例:递归类型
我们可以定义递归类型来处理树形结构或 JSON 数据:
```typescript
type Json = string | number | boolean | null | { [key: string]: Json } | Json[];
```
## 总结
掌握 TypeScript 的高级类型不仅能让你的代码类型安全度倍增,还能在开发库或通用组件时提供极佳的开发者体验(DX)。多加练习,"类型体操"也能变得得心应手。