Перегрузка функции с выражением в качестве аргумента - PullRequest
0 голосов
/ 06 июля 2018
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, то второй должен быть числом, в противном случае - строкой. К сожалению, когда мне нужно выразить веселье с помощью выражения, оно не работает

...