MST

星途 面试题库

面试题:TypeScript中接口的继承与交叉类型在定义对象结构上的区别

请阐述在TypeScript里,通过接口继承和交叉类型来定义对象结构各自的特点、适用场景,并分别举例说明。假设你要定义一个基础用户信息接口,然后基于此分别通过接口继承和交叉类型来扩展出管理员用户信息接口,管理员用户信息除了包含基础用户信息,还有一个权限列表(字符串数组类型)。
21.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

接口继承

  • 特点:接口继承是一种“is - a”关系,它允许一个接口基于另一个接口进行扩展,新接口会拥有父接口的所有成员,并且可以添加新的成员。这种方式结构清晰,便于理解和维护,在代码层次结构上更直观。
  • 适用场景:当需要构建一个具有层次结构的类型体系,且新类型与已有类型存在明确的父子关系时使用。比如在一个大型项目中,不同类型的用户(普通用户、管理员用户、超级管理员用户等),它们之间存在继承关系,使用接口继承可以很好地组织这些类型。
  • 示例
// 基础用户信息接口
interface BaseUser {
    name: string;
    age: number;
}

// 管理员用户信息接口,继承自BaseUser
interface AdminUser extends BaseUser {
    permissionList: string[];
}

// 使用示例
let admin: AdminUser = {
    name: "admin",
    age: 30,
    permissionList: ["addUser", "deleteUser"]
};

交叉类型

  • 特点:交叉类型是将多个类型合并为一个类型,新类型包含了所有交叉类型的成员。它更强调组合的概念,适用于需要将多个独立类型的特性组合到一起的场景。不过,当交叉的类型较多时,可能会使类型定义变得复杂,可读性下降。
  • 适用场景:当需要将多个不相关的类型特性组合到一个类型中时使用。例如,将一个具有可打印功能的类型和一个具有可保存功能的类型组合到一个文件类型上。
  • 示例
// 基础用户信息接口
interface BaseUser {
    name: string;
    age: number;
}

// 权限列表类型
interface Permission {
    permissionList: string[];
}

// 管理员用户信息接口,通过交叉类型实现
type AdminUser = BaseUser & Permission;

// 使用示例
let admin: AdminUser = {
    name: "admin",
    age: 30,
    permissionList: ["addUser", "deleteUser"]
};