首页 > 解决方案 > 基于另一个参数值的条件参数类型

问题描述

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

type EmployeeType = {
 // ...
}

type EmployerType = {
 // ...
}


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

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

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

一种替代方法是创建不同的函数,但在更复杂的场景中,更多的用户类型具有更广泛的名称可能会导致函数名称非常不可读。

标签: typescript

解决方案


这里最简单的解决方案是使用函数重载。考虑:


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

由于重载,我们可以进行许多类型定义,这将成为 TS 的指南,函数参数类型应如何为调用者表现。请注意,最终定义适用于可用的整个频谱。

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


推荐阅读