MST

星途 面试题库

面试题:TypeScript 交叉类型与接口合并的区别

阐述 TypeScript 交叉类型和接口合并在功能及使用场景上的区别,并通过代码示例展示两者不同的行为。
40.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

功能区别

  1. 交叉类型:将多个类型合并为一个类型,新类型同时具备所有参与交叉的类型的特性。它用于创建一个包含多个类型所有属性和方法的类型。例如,如果有类型 A 和类型 B,交叉类型 A & B 就会有 AB 的所有成员。
  2. 接口合并:多个同名接口声明会自动合并,合并后的接口包含所有同名接口的成员。接口合并主要用于在不同地方对同一个接口进行扩展。

使用场景区别

  1. 交叉类型
    • 适用于需要将多个独立类型的特性组合到一起的场景,比如组合不同功能模块的类型。
    • 常用于临时创建一个包含多个已有类型特性的新类型,这些已有类型可能来自不同的模块或功能领域。
  2. 接口合并
    • 当需要对一个接口进行逐步扩展,或者在不同文件中定义同一个接口的不同部分时使用。
    • 适合团队协作开发,不同开发者可以在各自的代码文件中对同一个接口进行补充和完善。

代码示例

// 交叉类型示例
type A = {
    name: string;
};
type B = {
    age: number;
};
// 创建交叉类型
let ab: A & B = { name: 'John', age: 30 };

// 接口合并示例
interface C {
    color: string;
}
interface C {
    size: number;
}
// 接口C现在同时有color和size属性
let c: C = { color: 'red', size: 10 };

在上述代码中,交叉类型 A & B 创建了一个新类型,它同时拥有 AB 的属性。而接口 C 通过两次声明实现了合并,最终 C 接口具有两个属性 colorsize