Jem*_*han 5 overloading typescript arrow-functions
有人知道如何在箭头函数上使用方法重载吗?
foo(args: string): string
foo(args: number): number
foo(args: string | number): string | number {
if (typeof args === "string") {
return "string"
}
return 1
}
Run Code Online (Sandbox Code Playgroud)
试过这个但不工作
foo: {
(args: string): string;
(args: number): number;
} = (args: string | number): string | number => {
if (typeof args === "string") {
return "string"
}
return 1
}
Run Code Online (Sandbox Code Playgroud)
由于我不完全理解的原因,实现的返回类型预计是交集,而不是并集:
class B {
foo: {
(args: string): string;
(args: number): number;
} = (args: string | number): string & number => {
if (typeof args === "string") {
return "string" as string & number;
}
return 1 as string & number;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,这并不比仅仅将实现声明为 return 更好any,就像文档示例中所做的那样:
class B {
foo: {
(args: string): string;
(args: number): number;
} = (args: string | number): any => {
if (typeof args === "string") {
return "string";
}
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
箭头函数不支持重载。从语言规范:
第 6 章中提供的函数声明的描述也适用于箭头函数,只是箭头函数不支持重载。
当你写
foo: {
(args: string): string;
(args: number): number;
}
Run Code Online (Sandbox Code Playgroud)
那么你就不会超载。您实际上说这foo是一个可以采用其中一种形式(或者两种形式)的函数。箭头函数
(args: string | number): string | number =>
Run Code Online (Sandbox Code Playgroud)
违反了这个限制,因为它是一个单一的函数(不是一个重载的函数)并且string | number意味着你可以在需要一个字符串时返回一个数字。
正如 artem 已经提出的,将返回类型更改为any或交叉类型可以解决问题。但这与重载不同,因为编译器不会在签名之间进行选择。你实际上只有一个:箭头函数。
| 归档时间: |
|
| 查看次数: |
1555 次 |
| 最近记录: |