TypeScript多载函式签章,包含具有相依传回型别的布林值参数

3lxsmp7m  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(139)

我想调用一个返回类型基于输入布尔参数的函数,所以如果参数为false,它返回一些类型,如果参数为true,它返回一些其他类型。我认为重载非常适合这种情况,但是TypeScript不让我使用它们:

hello(foo: false): ''
  hello(foo: true): 'bar' {
    if(foo) {
      return 'bar'
    } else {
      return ''
    }
  }

因为我得到This overload signature is not compatible with its implementation signature.
我应该使用其他的东西,修改这个代码,或者只是切换到多个具有不同名称和类似行为的函数?

mbjcgjjk

mbjcgjjk1#

尝试创建重载函数不正确。每个变量都必须与基础实现兼容
在代码中:

  • 基础实现仅接受true并返回bar
  • 因此hello(foo: false): ''与它不兼容
function hello(foo: true): 'bar'
function hello(foo: false): ''
function hello(foo: boolean): '' | 'bar' {
  if(foo) {
    return 'bar'
  } else {
    return ''
  }
}

const aFoo = hello(true);
const anEmptyString = hello(false);

相关问题