是否可以根据另一个参数的值将类型分配给函数的参数?
type EmployeeType = {
// ...
}
type EmployerType = {
// ...
}
enum UserType {
Employee = 'employee',
Employer = 'employer'
}
function createUser(type: UserType, properties: EmployeeType | EmployerType) {
// ...
}
在上面的示例中,我想根据properties
参数的值将相应的类型分配给type
。
一种替代方法是创建不同的功能,但是在更复杂的情况下,用户类型更多,名称更广泛可能会导致功能名称难以理解。
答案 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
返回这里仅作为示例返回类型。