Typescript总结

56 阅读3分钟

一、类型系统

  1. 基础类型: stringnumberbooleannullundefinedvoidsymbolbigint

  2. 对象类型: 定义对象的结构,包括:

    • 数组: number[]Array<number>
    • 函数: 参数类型、返回值类型、可选参数、默认参数、重载。
    • 类和构造函数类型
  3. 类型别名与接口

    • type: 创建类型别名,可用于原始值、联合类型、元组等任何类型。
    • interface: 主要用于定义对象的形状,支持声明合并。
    • 区别与应用场景: (这是高频面试题)

    interface 与type区别?

image.png

  1. 联合与交叉类型

    • 联合类型: A | B,表示可以是多种类型之一。
    • 交叉类型: A & B,表示必须同时满足多个类型。
  2. 字面量类型与类型收窄

    • 字面量类型: let status: 'success' | 'error'
    • 类型收窄: 使用 typeofinstanceofin=== 等守卫条件来缩小类型的范围(Type Narrowing)。
  3. 任意、未知与永不类型

    • any: 放弃类型检查,紧急逃生舱(应尽量避免)。
    • unknown: 更安全的 any,使用前必须进行类型检查或断言。
    • never: 表示永远不会发生的值,常用于抛出错误或永不返回的函数。
  4. unknown和any区别

  5. interface type区别

image.png

二、泛型

用于创建灵活、可复用的代码组件,而不牺牲类型安全。

  1. 泛型函数、接口、类: 使用 <> 语法定义类型参数。
  2. 泛型约束: 使用 extends 关键字限制类型参数必须满足某些条件。
  3. ** keyof 和 索引访问类型**: keyof T 获取类型的所有键,T[K] 获取属性的类型。
  4. 映射类型: 基于旧类型创建新类型,例如 Readonly<T>Partial<T> 的实现原理。
  5. 条件类型: T extends U ? X : Y,根据类型关系进行选择。
  6. 内置工具类型: 理解 PartialRequiredPickOmitReturnTypeParameters 等的作用和实现。

写一个API请求的泛型

三、Typescript内置高级类型

  • 处理可选 / 必填属性(Partial/Required
  • 筛选 / 提取属性(Pick/Omit/PickByType
  • 函数相关类型提取(ReturnType/Parameters
  • 处理空值(NonNullable
  • 映射类型(Record
  1. Partial(使得所有属性变为可选属性)
  2. Omit
  3. Required(使得所有属性变为必选属性)
  4. ReadOnly
interface User {
  id: number;
  name: string;
  age: number;
}

// Partial 后,每个属性都变成可选
const updateUser = (user: Partial<User>) => {
  // user 可能只含有部分属性
  // 例如:{ name: "小美" }
};

updateUser({ name: "小美" }); // 合法
updateUser({ id: 1, age: 18 }); // 合法

type UserWithoutId = Omit<User, 'id'>;

// 从 User 中选取 name 和 age 两个属性
type UserNameAndAge = Pick<User, "name" | "age">;
// 等价于:{ name: string; age: number }
type ReadonlyArray<T> = readonly T[];
const arr: ReadonlyArray<number> = [1, 2, 3];
arr.push(4); // 报错:只读数组没有 push 方法
arr[0] = 10; // 报错:无法修改只读数组的元素

  1. Record<K, T>
  • 功能:创建一个键为 K 类型、值为 T 类型的对象类型。
  • 场景:定义 “字典” 或 “映射” 类型(如配置表、键值对)。
type Role = "admin" | "user" | "guest";
type RolePerms = Record<Role, string[]>;
type ScoreMap = Record<string, number>;

6. Exclude<T, U>

从类型 T 中排除所有可分配给 U 的类型(仅适用于联合类型)。

Extract<T, U>
  1. T 中提取所有可分配给 U 的类型(与 Exclude 相反,仅适用于联合类型)。

8.Parameters 提取函数 T 的参数类型,返回一个元组类型。

  1. ReturnType<T>
  2. NonNullable<T>
  • 功能:从类型 T 中排除 null 和 undefined

  • 功能:提取函数 T 的返回值类型

三、类型推断、断言、tsconfig

四、类与面向对象

工程实践