覆盖打字稿中的函数返回类型

时间:2018-11-19 18:57:57

标签: javascript typescript

是否有一种方法可以覆盖函数的返回类型?在撰写本文时使用打字稿3.1.6

人为设计的例子,但要理解:

function sample(foo): string | number {
    if (foo === 'foo') {
        return 'string'
    }

    return 1
}

const result = sample('bar')

// but since we know it's a number we should be able to tell typescript this
const typedResult: number = sample('bar')

实际上,函数中的逻辑可能很复杂。

keyof and lookup types看起来很有希望,但我使用的选项集不多,也无法可靠地推断出模式。

我也尝试了以下解决方法,但没有成功。看来您无法覆盖类型。

const result = sample('bar')
const typedResult: number = result

令人沮丧的是,即使我进行了适当的检查以准确检查要处理的类型,但是如果我使用该类型专用的方法,仍然会遇到类型错误。 Typescript仍然认为我们不是100%知道类型。

对此有任何线索或解决方案吗?

1 个答案:

答案 0 :(得分:3)

为此,您将使用type assertion

const typedResult = sample('bar') as number

也就是说,将sample分为三个功能可能是值得的:

  • 一个总是返回数字的人
  • 总是返回字符串的一个
  • 一个执行sample在您的问题中所执行的操作(先进行相关参数测试,然后移交给其他两个功能之一)

...因此,当您知道结果将是哪种类型时,可以使用前两种类型之一,而不必使用类型断言。