MST

星途 面试题库

面试题:TypeScript中enum类型在接口与类中的复杂应用

假设有一个表示用户角色的enum: ```typescript enum UserRole { Admin = 'admin', Editor = 'editor', Viewer = 'viewer' } ``` 1. 定义一个接口User,包含name(字符串类型)和role(UserRole类型)属性。 2. 基于这个接口创建一个类UserInfo,有一个构造函数接收name和role参数,并在类中实现一个方法getRoleDescription,根据用户的role返回不同的描述,例如Admin角色返回“管理员”,Editor角色返回“编辑者”,Viewer角色返回“查看者”。 3. 现在有一个需求,系统中存在一些特殊用户,他们除了拥有普通角色外,还可能具有“super”的特殊标记,如何在上述的enum、接口和类的基础上进行修改以支持这个需求,同时保证类型安全?
22.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 1. 定义接口User
interface User {
  name: string;
  role: UserRole;
}

// 2. 创建类UserInfo
class UserInfo implements User {
  name: string;
  role: UserRole;

  constructor(name: string, role: UserRole) {
    this.name = name;
    this.role = role;
  }

  getRoleDescription(): string {
    switch (this.role) {
      case UserRole.Admin:
        return "管理员";
      case UserRole.Editor:
        return "编辑者";
      case UserRole.Viewer:
        return "查看者";
      default:
        return "";
    }
  }
}

// 3. 修改enum、接口和类以支持特殊用户
enum UserRole {
  Admin = 'admin',
  Editor = 'editor',
  Viewer = 'viewer',
  SuperAdmin = 'super_admin',
  SuperEditor = 'super_editor',
  SuperViewer = 'super_viewer'
}

interface User {
  name: string;
  role: UserRole;
  isSuper?: boolean;
}

class UserInfo implements User {
  name: string;
  role: UserRole;
  isSuper?: boolean;

  constructor(name: string, role: UserRole, isSuper?: boolean) {
    this.name = name;
    this.role = role;
    this.isSuper = isSuper;
  }

  getRoleDescription(): string {
    let baseDescription = "";
    switch (this.role) {
      case UserRole.Admin:
      case UserRole.SuperAdmin:
        baseDescription = "管理员";
        break;
      case UserRole.Editor:
      case UserRole.SuperEditor:
        baseDescription = "编辑者";
        break;
      case UserRole.Viewer:
      case UserRole.SuperViewer:
        baseDescription = "查看者";
        break;
      default:
        baseDescription = "";
    }
    return this.isSuper? `超级${baseDescription}` : baseDescription;
  }
}