以表达式作为参数的函数重载

时间:2018-07-06 12:06:25

标签: typescript overloading

function fun(is: true);
function fun(is: false);
function fun(is: boolean) {
  console.log('executed');
}

fun(true, ''); // ok
fun(false, 0); // ok
fun(1 > 0); // error

实际上我知道这是因为在编译之前我们不知道1 > 0将返回什么,但是我可以以某种方式摆脱它吗?

我不想添加第三个重载function fun(is: boolean);,因为我遇到了第二个参数取决于第一个参数的情况。

function fun(is: true, secondParameter: number);
function fun(is: false, secondParameter: string);
function fun(is: boolean, secondParameter: number | string);
function fun(is: boolean) {
  console.log('executed');
}

fun(true, 0); // ok
fun(false, '0'); // ok
fun(1 > 0, '0'); // ok
fun(1 < 0, '0'); // ok

查看第三和第四通电话。那就是我要避免的。我需要保护类型。如果第一个参数为true,则第二个必须为数字,否则为字符串。不幸的是,当我需要用表达式调用乐趣时,它就不起作用了

0 个答案:

没有答案