如何实施以下逻辑?
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; });
答案 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;