Javascript Typescript函数接受单个字符串或字符串数组

Javascript Typescript函数接受单个字符串或字符串数组,javascript,typescript,Javascript,Typescript,下面的函数有两个参数,一个是必需的tableName,另一个是可选的connectionName: export const clearTable=async( tableName:字符串[], connectionName='default' ) => { 试一试{ const connection=getConnection(connectionName) const promises=tableName.map((表)=> connection.query(`DELETE FROM${ta

下面的函数有两个参数,一个是必需的
tableName
,另一个是可选的
connectionName

export const clearTable=async(
tableName:字符串[],
connectionName='default'
) => {
试一试{
const connection=getConnection(connectionName)
const promises=tableName.map((表)=>
connection.query(`DELETE FROM${table}`)
)
等待承诺。所有(承诺)
}捕获(错误){
抛出新错误(
`无法清除数据库“${connectionName}”上的表“${tableName}”:${error}`
)
}
}
调用此函数:

clearTable(['table1','table2'])//工作正常,因为它接收数组
clearTable('table3')//失败,因为它不是数组>类型错误:tableName.map不是函数
通过这样或那样的方式,应该可以将单个
字符串
转换为字符串数组,以便能够使用与
数组.map相同的逻辑。我们还研究了建议的参数,但这似乎是不可能的,因为rest参数可以是零或更多,我们至少需要一个


处理这种情况的正确方法是什么?

首先将参数类型从
string[]
修改为
string[]| string
,然后在try块中,当您为
promises
赋值时,添加类型检查,如下所示:
Array.isArray(tableName)


如果要将
string | string[]=>string[]
问题分解为一个函数,可以编写以下内容并在多个位置使用:

function convert(param: string | string[]): string[] {
  return typeof param === 'string'
    ? [param]
    : param
}

tableName:string | string[]
?但是
map
函数在
tableName
上不能像
tableName.map()
@DarkLite1那样工作,那么您的函数需要检查
tableName的类型,然后再决定是否应该将其视为字符串或字符串数组。当然不是,因此,您也需要在运行时逻辑中处理这一点。例如,如果它还不是数组,请使用
[tableName]
。@jornsharpe“当然不是”或“怎么会有”不是最好的表达方式,如果你记住我们在一个提问者不知道一切的地方。它是100%有效的,没有像每个人一样的知识。不知道typescript在运行时被剥离可以直接解释,没有负面影响。我宁愿先将单个字符串转换为字符串数组。但我会弄明白的。谢谢你的帮助:)如果(typeof tableName==='string'){tableName=[tableName]}
,你就知道了。再次感谢你让我走上了正确的道路。我喜欢这种模块化的方法,使它非常方便。谢谢分享:)
function convert(param: string | string[]): string[] {
  return typeof param === 'string'
    ? [param]
    : param
}