TypeScript高级类型体操:45个实用技巧完全指南

从基础到进阶,系统梳理TypeScript中的高级类型操作,包含条件类型、映射类型、模板字面量类型等核心概念

张三
张三
2024/1/18 · 20分钟 · 1567 · 124
TypeScript类型系统前端编程技巧
TypeScript高级类型体操:45个实用技巧完全指南

TypeScript高级类型体操完全指南

TypeScript的类型系统是一个强大的工具,本文将带你深入理解其高级特性,掌握类型编程的核心技巧。

🎯 基础类型操作

1. 条件类型(Conditional Types)

type IsString<T> = T extends string ? true : false;
type Result = IsString<'hello'>; // true

// 高级条件类型
type Flatten<T> = T extends Array<infer U> ? U : T;

2. 映射类型(Mapped Types)

// 将所有属性变为可选
interface User {
  name: string;
  age: number;
  email: string;
}

type PartialUser = {
  [K in keyof User]?: User[K];
};

// 只读属性
interface ReadonlyUser {
  readonly [K in keyof User]: User[K];
}

🔧 高级技巧

1. 模板字面量类型

type EventName<T extends string> = `${T}Change`;
type ButtonEvent = EventName<'button'>; // "buttonChange"

// 复杂模板操作
type CamelCase<S extends string> = 
  S extends `${infer P1}_${infer P2}${infer P3}` 
    ? `${P1}${Uppercase<P2>}${CamelCase<P3>}` 
    : S;

2. 递归类型

// 深度Partial
interface DeepPartial<T> {
  [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
}

// 树形结构遍历
interface TreeNode<T> {
  value: T;
  children: TreeNode<T>[];
}

🎪 实战案例

1. API响应类型安全

interface ApiResponse<T> {
  code: number;
  message: string;
  data: T;
}

type UserResponse = ApiResponse<{
  id: number;
  name: string;
}>;

2. 表单验证类型

type ValidationRule<T> = {
  [K in keyof T]?: (value: T[K]) => boolean | string;
};

interface LoginForm {
  username: string;
  password: string;
}

const rules: ValidationRule<LoginForm> = {
  username: (v) => v.length >= 3 || "用户名至少3位",
  password: (v) => /[A-Z]/.test(v) || "必须包含大写字母"
};

🚀 性能优化

  • 避免过度复杂的类型
  • 使用类型缓存
  • 合理拆分类型定义

总结

掌握TypeScript高级类型系统,能够显著提升代码的类型安全性和开发效率。

张三

张三

前端开发工程师,专注于React和Astro技术栈

GitHub

评论区

评论功能即将上线,敬请期待!