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