当前位置: 首页 > 知识库问答 >
问题:

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

姜业
2023-06-05
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个答案

戚俊健
2023-06-05

这个意思?
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"))
 类似资料:
  • 我需要克隆一个已经存在的JavaScript代码到TypeScript。javascript是: 如何键入参数? 我尝试了 但是我的情报显示“错误”和“结果”的名字找不到。而且我找不到任何关于“函数”类型的留档。

  • 问题内容: 经典(非js)重载方法: Javascript不允许使用同一个名称定义多个功能。这样,这样的事情就会出现: 除了传递带有重载的对象之外,JavaScript中是否有更好的解决方法来实现函数重载? 传递重载会很快导致函数变得过于冗长,因为每个可能的重载都需要一个条件语句。使用函数来完成那些条件语句的内部会导致带有范围的棘手情况。 问题答案: Javascript中的参数重载有多个方面:

  • 有没有一种最佳实践可以将函数类型与React prop类型和TypeScript结合使用? 我以为这会奏效,但事实上它错了: 按照这个思路,我让它工作了,但它似乎不必要地冗长:https://github.com/Microsoft/TypeScript/issues/20007

  • Typescript支持函数重载,这很酷,可以像这样重载一个常量函数: 但假设我想通知预期的响应类型,而不是任何。我可以通过简单地用所需类型替换来实现这一点: 如果我想更进一步,而不是说它只能返回类型的响应,我可以返回一个泛型类型: 问题是,对于< code>const,没有泛型类型< code>T。事实上没有,我需要在某处声明< code>T是一个泛型类型,但是我不知道在哪里! 我到处尝试,无法

  • 我有这个界面: 我需要一个类来实现它,但我无法获得在类中实现getDist()方法的正确语法。。 它说: 类'Point'声明接口'IPoint'但不实现它:类型'Point'和'IPoint'的属性'getDist'的类型不兼容:调用类型'()= 做这件事的正确方法是什么? 谢谢