【发布时间】:2021-03-14 13:42:20
【问题描述】:
我正在尝试创建一个函数,将其参数传递给另一个函数。这两个函数都需要有相同的重载。
function original (a: number): boolean;
function original (a: string, b: string): boolean;
function original (a: number | string, b?: string): boolean {
return true;
}
function pass (a: number): boolean;
function pass (a: string, b: string): boolean;
function pass (a: number | string, b?: string): boolean {
return original(a, b);
}
这不起作用。
'string | 类型的参数number' 不能分配给 'string' 类型的参数。
类型“数字”不可分配给类型“字符串”。(2345) input.tsx(4, 10):调用会成功针对此实现,但重载的实现签名在外部不可见。
【问题讨论】:
-
你不能。您必须将
original的内部类型公开为重载。 -
请记住,一旦你重载了
original函数,这个类型签名function original (a: number | string, b?: string): boolean(最后一个)就不会暴露给外部世界。你可以考虑复制这个function original (a: number | string, b?: string): boolean就像这里tsplay.dev/mqQy2m