【发布时间】:2017-09-13 15:39:29
【问题描述】:
我有一个函数有一些重载。
function foo(x: number, y: void): void;
function foo(x: number, y: number | string): number;
function foo(x: number, y: any) {
if (typeof y === "undefined") {
return;
}
return typeof y === "string"
? x / parseFloat(y)
: x / y;
}
我没有使用y 的可选参数,而是专门使用void 来指定返回值。预期的用例包括使用undefined 作为第二个参数调用它的用例。
在另一个函数中,我会这样称呼它:
function bar(x: number, y?: number | string) {
const f = foo(x, y);
// Some other stuff
}
这会导致以下类型错误:
Argument of type 'string | number | undefined' is not assignable to parameter of type 'string | number'.
Type 'undefined' is not assignable to type 'string | number'.
我的理解是foo 将string | number | void 作为第二个参数,并且当bar 调用它时,它将传递string、number 或void,以及TypeScript将清楚foo 的返回值。
达到预期效果的正确方法是什么?
【问题讨论】: