Tengo 3 tipos de usuarios como se declara a continuación
declare enum UserType { Admin = "Admin", Tester = "Tester", Customer = "Customer", } type AdminParams = { ... } class Admin { constructor(parameters: AdminParams) {} } type TesterParams = { ... } class Tester { constructor(parameters: TesterParams) {} } type CustomerParams = { ... } class Customer { constructor(parameters: CustomerParams) {} }Y tengo la clase UserFactory que genera una instancia de usuario basada en el tipo dado
// Params based on user Type type UserTypeParamsMap = { [UserType.Admin]: AdminParams; [UserType.Tester]: TesterParams; [UserType.Customer]: CustomerParams; }; type UserParam<T extends keyof UserTypeParamsMap> = UserTypeParamsMap[T]; // Class based on user type type UserTypeInstanceMap = { [UserType.Admin]: Admin; [UserType.Tester]: Tester; [UserType.Customer]: Customer; }; type UserInstance<T extends keyof UserTypeInstanceMap> = UserTypeInstanceMap[T]; // Factory export class UserFactory { public static createNew = async <T extends keyof UserTypeParamsMap>(userType: T, params: UserParam<T>): Promise<UserInstance<T>> => { ... } } La firma de la función es correcta cuando ingreso diferentes tipos de usuarios 

Pero en la función no puede restringir los parámetros, cada vez que lo verifico en la declaración if 
¿Cómo puedo reducirlo para que sea un tipo de mapa específico usando el tipo de userType dado?
Versión mecanografiada: 4.6.3
Esperado: los params se reducirán a un tipo específico