【发布时间】:2021-11-20 16:01:42
【问题描述】:
考虑这个例子:
export function fn(arg: string): void;
export function fn(arg: number): void;
export function fn(arg: any) {
console.log(arg);
}
所以,fn 可以用字符串或数字来调用。
fn('hello!');
fn(42);
到目前为止,一切都很好。
但随后fn 在不同的地方执行:
function fn2(arg2: string | number) {
fn(arg2);
}
在这种情况下,TypeScript 会抱怨:
没有重载匹配这个调用。重载 1 of 2, '(arg: string): void',出现以下错误。
Argument of type 'string | number' is not assignable to parameter of type 'string'. Type 'number' is not assignable to type 'string'. Overload 2 of 2, '(arg: number): void', gave the following error. Argument of type 'string | number' is not assignable to parameter of type 'number'. Type 'string' is not assignable to type 'number'.ts(2769)
index.tsx(3, 17): 调用会成功 实现,但重载的实现签名不是 外部可见。
有人可以帮我理解这里发生了什么吗?
【问题讨论】:
标签: javascript typescript overloading typescript-typings