有人知道如何在arrow函数上使用方法重载吗?
foo(args: string): string
foo(args: number): number
foo(args: string | number): string | number {
if (typeof args === "string") {
return "string"
}
return 1
}
我试过了,但不起作用
foo: {
(args: string): string;
(args: number): number;
} = (args: string | number): string | number => {
if (typeof args === "string") {
return "string"
}
return 1
}
2条答案
按热度按时间hpxqektj1#
箭头函数不支持重载。根据语言规范:
第6章提供的函数声明的描述也适用于箭头函数,只是箭头函数不支持重载。
当你写作的时候
那么你就不会重载,你实际上是说
foo
是一个可以采用这两种形式之一(或者两种形式都有)的函数。违反了这个限制,因为它是单个函数(不是重载函数),而
string | number
意味着当需要字符串时可以返回一个数字。正如artem所建议的,将返回类型改为
any
或交集类型可以解决问题,但这与重载不同,因为编译器不会在签名之间进行选择,实际上只有一个签名:箭头函数的函数名。5sxhfpxr2#
由于我不完全理解的原因,实现的返回类型应该是交集,而不是并集:
因此,这并不比声明实现返回
any
好多少,就像文档示例中所做的那样: