使用第一个可选参数进行重载

时间:2015-11-19 20:38:06

标签: typescript overloading

如何实施以下逻辑?

function test(data: {x}, f: Function);
function test(f: Function);

function test(data: {x}, f: Function) {
    if (!f) {
        f = data;
        data = {x: 111};
    }

    return f(data);
}

test({x: 17}, t => 0);
test(t => 0);

它以正确的方式编译,但显示2个错误。

function test(data, f) {
    if (!f) {
        f = data;
        data = { x: 111 };
    }
    return f(data);
}
test({ x: 17 }, function (t) { return 0; });
test(function (t) { return 0; });

要测试的地方:http://www.typescriptlang.org/Playground

PS:Same question in Russian

1 个答案:

答案 0 :(得分:2)

我找到了解决方案:

function test(data: {x}, f: Function);
function test(f: Function);

//function test(data: {x} | Function, f?: Function) {
function test(data, f?) {
    if (!f) {
        f = data as Function;
        data = {x: 111};
    }

    return f(data);
}

以下来电是可以的:

test({x: 17}, t => 0);
test(t => 0);

以下不是:

test({x: 17});
test(0);
test(t => 0, t => 0);

任何这些方式似乎都可以:

function test(data: {x} | Function, f?: Function) {
function test(data, f?) {

需要显式类型转换:

f = data as Function;