一、类型系统
-
基础类型:
string,number,boolean,null,undefined,void,symbol,bigint。 -
对象类型: 定义对象的结构,包括:
- 数组:
number[],Array<number> - 函数: 参数类型、返回值类型、可选参数、默认参数、重载。
- 类和构造函数类型。
- 数组:
-
类型别名与接口:
type: 创建类型别名,可用于原始值、联合类型、元组等任何类型。interface: 主要用于定义对象的形状,支持声明合并。- 区别与应用场景: (这是高频面试题)
interface 与type区别?
-
联合与交叉类型:
- 联合类型:
A | B,表示可以是多种类型之一。 - 交叉类型:
A & B,表示必须同时满足多个类型。
- 联合类型:
-
字面量类型与类型收窄:
- 字面量类型:
let status: 'success' | 'error'。 - 类型收窄: 使用
typeof,instanceof,in,===等守卫条件来缩小类型的范围(Type Narrowing)。
- 字面量类型:
-
任意、未知与永不类型:
any: 放弃类型检查,紧急逃生舱(应尽量避免)。unknown: 更安全的any,使用前必须进行类型检查或断言。never: 表示永远不会发生的值,常用于抛出错误或永不返回的函数。
-
unknown和any区别
-
interface type区别
二、泛型
用于创建灵活、可复用的代码组件,而不牺牲类型安全。
- 泛型函数、接口、类: 使用
<>语法定义类型参数。 - 泛型约束: 使用
extends关键字限制类型参数必须满足某些条件。 - ** keyof 和 索引访问类型**:
keyof T获取类型的所有键,T[K]获取属性的类型。 - 映射类型: 基于旧类型创建新类型,例如
Readonly<T>,Partial<T>的实现原理。 - 条件类型:
T extends U ? X : Y,根据类型关系进行选择。 - 内置工具类型: 理解
Partial,Required,Pick,Omit,ReturnType,Parameters等的作用和实现。
写一个API请求的泛型
三、Typescript内置高级类型
- 处理可选 / 必填属性(
Partial/Required) - 筛选 / 提取属性(
Pick/Omit/PickByType) - 函数相关类型提取(
ReturnType/Parameters) - 处理空值(
NonNullable) - 映射类型(
Record)
- Partial(使得所有属性变为可选属性)
- Omit
- Required(使得所有属性变为必选属性)
- 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; // 报错:无法修改只读数组的元素
- 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>
T中提取所有可分配给U的类型(与Exclude相反,仅适用于联合类型)。
8.Parameters
提取函数 T 的参数类型,返回一个元组类型。
ReturnType<T>NonNullable<T>
-
功能:从类型
T中排除null和undefined。 -
功能:提取函数
T的返回值类型。