TypeScript类型体操
以下是关于 TypeScript 类型体操 的系统梳理:
一、基础知识点
-
基本类型操作
- 联合类型(Union Types):
type A = string | number
- 交叉类型(Intersection Types):
type B = { a: string } & { b: number }
- 类型别名(Type Aliases):
type Point = { x: number; y: number }
- 接口(Interfaces):
interface User { name: string; age: number }
- 联合类型(Union Types):
-
泛型(Generics)
- 基础泛型:
type Box<T> = { value: T }
- 泛型约束:
type WithId<T extends { id: string }> = T & { metadata: string }
- 基础泛型:
-
条件类型(Conditional Types)
- 基本语法:
T extends U ? X : Y
- 示例:
type IsString<T> = T extends string ? true : false
- 基本语法:
-
映射类型(Mapped Types)
- 动态生成类型:
type Optional<T> = { [K in keyof T]?: T[K] }
- 键重映射:
type Getters<T> = { [K in keyof T as
get${Capitalize<string & K>}]: () => T[K] }
- 动态生成类型:
-
索引类型(Index Types)
- 键值查询:
type NameType = User['name']
- 联合键值:
type Values<T> = T[keyof T]
- 键值查询:
二、进阶知识
-
递归类型(Recursive Types)
- 树形结构定义:
type TreeNode<T> = { value: T; children: TreeNode<T>[]; }
- 树形结构定义:
-
模板字面量类型(Template Literal Types)
- 字符串模式生成:
type Route = `/user/${ string}/profile`; type EventName = 'click' | 'hover'; type HandlerName
- 字符串模式生成: