cat blog!!

TypeScript学习笔记(二)类型工具!!

tags: TypeScript
@clownly 24/02/2025

类型工具

定义

类型工具是指在类型层面上进行操作的工具,我更倾向于按照使用目的来划分类型工具。

注意: 类型工具不是类型,而是类型的操作。请区分类型工具工具类型

类型创建

1. 类型别名

// 封装类型
type T = string | number;

interface A {
  a: string;
}

interface B {
  b: number;
}
// 封装类型结构
type C = A & B;

2. 工具类型

类型别名 + 泛型

// 工具类型
type T1 = Partial<T>; // 可选
type T2 = Required<T>; // 必选

3. 联合类型

// 联合类型
type T = string | number;

4. 交叉类型

// 交叉类型
type T = A & B;

5. 索引签名类型

// 索引签名类型
interface A {
  [key: string]: string;
}

6. 索引类型查询

// 索引类型查询
interface A {
  a: string;
  b: number; 
}
type T = keyof A; // a | b

7. 索引类型访问

// 索引类型访问
interface A {
  a: string;
  b: number;
}
type T = A["a"]; // string
/* 这里的"a"是一个字符串字面量类型,它不是一个属性名 */

interface B {
  [key: string]: number;
}
type T = B[string]; // number

8. 映射类型

interface A {
  a: string;
  b: number;
}
// 类型别名 + 泛型 = 工具类型
type Stringify<T> = {
  [P in keyof T]: string;
};
type Clone<T> = {
  [P in keyof T]: T[P];
}
type T1 = Stringify<A>; // { a: string; b: string; }
类型工具 创建新类型的方式 常见搭配
类型别名 将一组类型/类型结构封装,作为一个新的类型 联合类型、映射类型
工具类型 TypeName<T> 在类型别名的基础上,基于泛型去动态创建新类型 基本所有类型工具
联合类型 创建一组类型集合,满足其中一个类型即满足这个联合类型(||) 类型别名、工具类型
交叉类型 创建一组类型集合,满足其中所有类型才满足映射联合类型(&&) 类型别名、工具类型
索引签名类型 声明一个拥有任意属性,键值类型一致的接口结构 映射类型
索引类型查询 从一个接口结构,创建一个由其键名字符串字面量组成的联合类型 映射类型
索引类型访问 从一个接口结构,使用键名字符串字面量访问到对应的键值类型 类型别名、映射类型
映射类型 从一个联合类型依次映射到其内部的每一个类型 工具类型

类型安全保护