MST

星途 面试题库

面试题:TypeScript中Record工具类型结合条件类型的应用

假设有一个类型 `UserType` 定义如下:`type UserType = 'admin' | 'user' | 'guest';`,使用Record工具类型和条件类型创建一个新类型 `Permissions`,使得 `Permissions['admin']` 是 `'create' | 'read' | 'update' | 'delete'`,`Permissions['user']` 是 `'read'`,`Permissions['guest']` 是 `'read'`。并编写一个函数,接收 `UserType` 类型的值作为参数,返回对应权限。
16.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type UserType = 'admin' | 'user' | 'guest';

type Permissions = Record<UserType, 'create' |'read' | 'update' | 'delete'>;
type SpecificPermissions = {
    'admin': 'create' |'read' | 'update' | 'delete';
    'user':'read';
    'guest':'read';
};

type FinalPermissions = {
    [K in UserType]: K extends keyof SpecificPermissions? SpecificPermissions[K] : never;
};

function getPermissions(userType: UserType): FinalPermissions[UserType] {
    if (userType === 'admin') {
        return 'create' |'read' | 'update' | 'delete' as FinalPermissions['admin'];
    } else {
        return'read' as FinalPermissions['user' | 'guest'];
    }
}