unclejee's blog

深入理解TypeScript高级类型

Tags:
typescript
javascript
编程技巧
Cover image for 深入理解TypeScript高级类型

在现代前端开发中,TypeScript已经成为不可或缺的一部分。它不仅提供了静态类型检查的能力,还引入了许多高级类型概念,帮助开发者编写更加健壮的代码。

条件类型

条件类型允许我们在类型系统中进行条件判断。语法形式为 T extends U ? X : Y,表示如果T可以赋值给U,则返回X类型,否则返回Y类型。

type TypeName<T> = T extends string 
  ? "string" 
  : T extends number 
    ? "number" 
    : T extends boolean 
      ? "boolean" 
      : "other";

type A = TypeName<string>;  // "string"
type B = TypeName<boolean>; // "boolean"
type C = TypeName<RegExp>;  // "other"

映射类型

映射类型允许我们从一个旧类型创建一个新类型,通过遍历旧类型的所有属性,并对每个属性应用转换。

interface CatInfo {
  age: number;
  breed: string;
}

type OptionsFlags<T> = {
  [Property in keyof T]: boolean;
};

type CatInfoOptions = OptionsFlags<CatInfo>;
// 结果:
// {
//   age: boolean;
//   breed: boolean;
// }

索引类型

索引类型允许我们动态获取对象属性的类型。

interface APIResponse {
  userId: string;
  name: string;
  email: string;
}

type ResponseKeys = keyof APIResponse;  // "userId" | "name" | "email"
type ResponseValues = APIResponse[keyof APIResponse]; // string

实际应用场景

这些高级类型在实际开发中有广泛的应用:

  1. API响应处理:使用映射类型将所有字段转为可选
  2. 状态管理:使用条件类型根据参数类型推断返回类型
  3. 组件库开发:使用索引类型提取props类型

总结

TypeScript的高级类型为开发者提供了强大的类型抽象能力,使我们能够在编译时发现更多潜在错误,同时保持代码的灵活性。掌握这些类型工具对于构建大型应用程序至关重要。