MST

星途 面试题库

面试题:TypeScript接口和类型别名在处理继承与交叉类型时的应用及差异

假设你有一个基础类型或接口,现在需要创建几个基于它的新类型,分别通过接口继承和类型别名交叉类型的方式来实现,说明这两种方式的特点及适用场景,并编写相应代码。
26.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

接口继承实现新类型

  1. 特点
    • 接口继承通过 extends 关键字来创建新接口,新接口会拥有父接口的所有成员。
    • 接口继承主要用于定义对象类型的层次结构,使得代码结构更清晰,便于维护和扩展。
    • 它遵循严格的类型检查,对于对象字面量的赋值,必须严格匹配接口定义。
  2. 适用场景
    • 当你需要构建一个对象类型的继承体系,比如定义一系列具有相同基本属性和方法的对象类型时,适合使用接口继承。例如,在面向对象编程中,定义不同类型的用户,如普通用户、管理员用户等,它们都有一些共同的用户基本信息(如用户名、邮箱),可以通过接口继承来构建类型体系。
  3. 代码示例
// 基础接口
interface Person {
    name: string;
    age: number;
}

// 通过接口继承创建新接口
interface Employee extends Person {
    jobTitle: string;
}

// 使用
let employee: Employee = {
    name: "Alice",
    age: 30,
    jobTitle: "Engineer"
};

类型别名交叉类型实现新类型

  1. 特点
    • 交叉类型通过 & 运算符将多个类型合并为一个类型,新类型同时拥有多个类型的所有成员。
    • 交叉类型更灵活,它可以合并不同种类的类型,不仅仅局限于对象类型。
    • 类型别名定义的交叉类型在使用上更简洁,它可以像使用任何其他类型一样使用。
  2. 适用场景
    • 当你需要将多个不同类型的属性合并到一个类型中,而这些类型不一定有继承关系时,适合使用交叉类型。例如,你有一个表示位置的类型和一个表示颜色的类型,你想创建一个同时具有位置和颜色属性的新类型,就可以使用交叉类型。
  3. 代码示例
// 基础类型别名
type Point = {
    x: number;
    y: number;
};

type Color = {
    color: string;
};

// 通过交叉类型创建新类型
type ColoredPoint = Point & Color;

// 使用
let coloredPoint: ColoredPoint = {
    x: 10,
    y: 20,
    color: "red"
};