typescript 类型收窄 和 函数重载 如何用?

function funa (b:string):number
function funa (b:string[]):number[]
function funa (b:string|string[]):number|number[]{
  const flag = typeof b === 'string'
  // can't use if(flag)
  if(typeof b === 'string') {
    b = [b]
  }
  let arr = []
  for(let i of b){
    arr.push(parseFloat(i))
  }
  return flag? arr[0]:arr
}

function func (b:string|string[]):number|number[]{
  // can't direct return funa(b)
  if(typeof b ==='string')
    return funa(b)
  else
    return funa(b)
}

实际代码中
funa 里有其他代码,拼数据一起 ajax 请求类的,上面只是简化代码
func 会调用 funa 并且有其他调用

https://www.typescriptlang.org/zh/play?#code/GYVwdgxgLglg9mABKMBDRAKARgLgM5QBOMYA5gJQ5ggC2WApoQFArTxIrrb5EmkDaAXUrU6jIS3BsEycF1wFiZAD6K+QkbQaFlo7UIDeTRIggICyADapSiALyIoATwAO9OMERZ7dhwHI1Mj9jRAB6UNNUMD8oRBA8ekQYYAxgawoQ5IxnNw8vH39A0j9yRCMTE28HfixBEIBfEMt6WNRCQntECRNgOEIMZtiYRDyscnKKtsIAOhd4gAsMFzaEgDFLOFQoDBhycgaQwhaQQg50gH5EKf4ABkEcKaZGyUhYGVZMBV4VIo0qLUYugBhEMIXCkWisQAJjAjtBEEcoCcOHJsPsTFkcu5PFVfAFvsV0RVEcjZGg0SF6JYEiETCTTmTUBT6kA

阅读 1.7k
1 个回答

这个意思?
image.png

function funa (b:string): number
function funa (b:string[]): number[]
function funa (b:string | string[]): number | number[]{
    switch (typeof b) {
        case "string":
            return parseFloat(b);
        case "object":
            return b.map(v => parseFloat(v));
    }
}

console.log(funa(["1", "2", "3", "4"]))
console.log(funa("1"))
推荐问题