是否有一种方法可以覆盖函数的返回类型?在撰写本文时使用打字稿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%知道类型。
对此有任何线索或解决方案吗?
答案 0 :(得分:3)
为此,您将使用type assertion:
const typedResult = sample('bar') as number
也就是说,将sample
分为三个功能可能是值得的:
sample
在您的问题中所执行的操作(先进行相关参数测试,然后移交给其他两个功能之一)...因此,当您知道结果将是哪种类型时,可以使用前两种类型之一,而不必使用类型断言。