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'];
}
}