MST

星途 面试题库

面试题:TypeScript结构类型在复杂场景下的应用

在一个大型的前端项目中,有多个模块需要处理用户数据。用户数据结构较为复杂,包含基本信息(如姓名、年龄)、权限信息(如角色、可操作的功能列表)以及历史记录(如登录历史、操作历史)。请设计一套基于TypeScript结构类型的方案,实现不同模块间对用户数据的类型安全访问与操作,同时要考虑到扩展性,例如未来可能需要添加新的用户属性。阐述你的设计思路,并给出关键代码示例。
32.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义基础类型:将用户数据按不同部分拆分为基础类型,如基本信息、权限信息、历史记录类型。
  2. 组合类型:使用 interface 将基础类型组合成完整的用户数据类型。
  3. 类型别名:为不同模块对用户数据的操作定义类型别名,增强类型安全性。
  4. 扩展性:通过接口的扩展方式,方便未来添加新的用户属性。

关键代码示例

// 1. 定义基本信息类型
type BasicInfo = {
    name: string;
    age: number;
};

// 2. 定义权限信息类型
type PermissionInfo = {
    role: string;
    accessibleFunctions: string[];
};

// 3. 定义历史记录类型
type HistoryRecord = {
    loginHistory: string[];
    operationHistory: string[];
};

// 4. 组合成完整的用户数据类型
interface UserData {
    basicInfo: BasicInfo;
    permissionInfo: PermissionInfo;
    historyRecord: HistoryRecord;
}

// 5. 为某个模块操作特定用户数据定义类型别名
type UserModuleData = Pick<UserData, 'basicInfo' | 'permissionInfo'>;

// 示例函数,展示类型安全访问
function printUserBasicInfo(user: UserData) {
    console.log(`Name: ${user.basicInfo.name}, Age: ${user.basicInfo.age}`);
}

// 未来添加新属性示例
interface ExtendedUserData extends UserData {
    newProperty: string;
}