MST

星途 面试题库

面试题:基于TypeScript设计复杂业务状态类型的接口

在一个项目中,用户有多种状态,如'普通用户'、'VIP用户',且VIP用户又分为'青铜VIP'、'白银VIP'、'黄金VIP',每种用户状态下又有不同的权限,比如'普通用户'只能查看商品,'青铜VIP'除查看外还能参与普通折扣活动,'白银VIP'可参与更多专属活动等。请使用TypeScript设计相关的类型接口来准确描述这些状态和权限关系,并阐述你遵循的设计原则。
47.6万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

类型接口设计

// 定义用户权限接口
interface UserPermissions {
    viewProducts: boolean;
    participateInNormalDiscount: boolean;
    participateInExclusiveActivities: boolean;
}

// 普通用户接口
interface NormalUser extends UserPermissions {
    userType: '普通用户';
}

// VIP用户基础接口
interface VIPUser extends UserPermissions {
    userType: 'VIP用户';
    vipLevel: '青铜VIP' | '白银VIP' | '黄金VIP';
}

// 青铜VIP用户接口
interface BronzeVIP extends VIPUser {
    vipLevel: '青铜VIP';
}

// 白银VIP用户接口
interface SilverVIP extends VIPUser {
    vipLevel: '白银VIP';
}

// 黄金VIP用户接口
interface GoldVIP extends VIPUser {
    vipLevel: '黄金VIP';
}

// 用户联合类型
type User = NormalUser | BronzeVIP | SilverVIP | GoldVIP;

设计原则阐述

  1. 单一职责原则:每个接口只负责描述一种特定类型用户的状态和权限,例如 NormalUser 接口只关注普通用户相关信息,VIPUser 接口及其子接口分别负责不同等级VIP用户的信息,这样使得代码结构清晰,易于维护和扩展。
  2. 接口隔离原则:将用户权限抽象到 UserPermissions 接口,然后不同类型用户通过继承该接口获取相应权限,避免了大而全的接口设计,保证每个用户类型只拥有与其相关的权限接口,减少不必要的依赖。
  3. 可扩展性:采用接口继承和联合类型的方式,方便未来对新的用户类型(如钻石VIP等)或新的权限进行扩展,只需要新增相应接口并添加到 User 联合类型中即可。