Javascript 确保参数为数组

Javascript 确保参数为数组,javascript,arrays,typescript,Javascript,Arrays,Typescript,我试图找到一种方法来检查函数参数是否是数组。如果不是,则将其转换为数组并对其执行函数,否则仅对其执行函数 例如: interface employee { first: string, last: string } function updateEmployees (emp: employee | employee[]) { let employees = []; if (emp instanceof Array) employees = [emp];

我试图找到一种方法来检查函数参数是否是数组。如果不是,则将其转换为数组并对其执行函数,否则仅对其执行函数

例如:

interface employee {
    first: string,
    last: string
}

function updateEmployees (emp: employee | employee[]) {
    let employees = [];
    if (emp instanceof Array) employees = [emp];
    else employees = emp;
    employees.forEach(function(e){
        return 'something'
    })
}

这对我来说似乎是可行的,但是抛出了一个警告,即类型“employee”不可分配给类型“any[]”。类型“employee”中缺少属性“length”。

以下是函数的固定版本:

function updateEmployees (emp: employee | employee[]) {
    let employees: employee[] = [];
    if (emp instanceof Array) employees = emp;
    else employees = [emp];
    employees.forEach(function(e){
        return 'something'
    })
}
但它可以更短:

function updateEmployees(emp: employee | employee[]) {
    (emp instanceof Array ? emp : [emp]).forEach(function(e){
        return 'something'
    })
}

您切换了
if
/
else
这种多态性通常是个坏主意。只需让
updateEmployees
获取一个数组。如果您想用单个员工调用它,那么就用
updateEmployees([emp])
或者甚至
[].concat(emp).forEach(…
来调用它。