基于另一个参数值的条件参数类型

时间:2020-03-28 17:20:01

标签: typescript

是否可以根据另一个参数的值将类型分配给函数的参数?

type EmployeeType = {
 // ...
}

type EmployerType = {
 // ...
}


enum UserType {
    Employee = 'employee',
    Employer = 'employer'
}

function createUser(type: UserType, properties: EmployeeType | EmployerType) {
 // ...
}

在上面的示例中,我想根据properties参数的值将相应的类型分配给type

一种替代方法是创建不同的功能,但是在更复杂的情况下,用户类型更多,名称更广泛可能会导致功能名称难以理解。

1 个答案:

答案 0 :(得分:1)

这里最简单的解决方案是使用function overloads。考虑:


function createUser(type: UserType.Employee, properties: EmployeeType): void 
function createUser(type: UserType.Employer, properties: EmployerType): void
function createUser(type: UserType, properties: EmployeeType | EmployerType) {
 // ...
}

由于重载,我们可以进行许多类型定义,这些定义将为TS指导函数参数类型应如何针对调用者表现。请注意,最终定义正在与整个可用频谱一起工作。

void返回这里仅作为示例返回类型。