Как передать 0 в необязательные параметры TypeScript? - PullRequest
0 голосов
/ 21 марта 2019

Следующая функция выводит "null"

function foo(x?: number): void {
  alert(x || null);
}

foo(0);

Я знаю, что 0 == ноль - ложь, поэтому не должно ли это печататься 0?

Ответы [ 3 ]

2 голосов
/ 21 марта 2019

// Операция логического И

true  && true;  // Result=>true
true  && false; // Result=>false
false && true;  // Result=>false
false && false; // Result=>false

// Операция логического ИЛИ

true  || true;  // Result=>true
true  || false; // Result=>true
false || true;  // Result=>true
false || false; // Result=>false

Ваш код оповещения на основе следующих правил:

false || true;  // Result=>true
false || false; // Result=>false

или,

false || any_data;  // Result=> any_data
false || any_data; // Result=> any_data

Для уточнения:

alert( 1 || 0 ); // 1 (1 is truthy)
alert( true || 'no matter what' ); // (true is truthy)

alert( null || 1 ); // 1 (1 is the first truthy value)
alert( null || 0 || 1 ); // 1 (the first truthy value)
alert( undefined || null || 0 ); // 0 (all falsy, returns the last value)

Поэтому, когда x = 0, это означает, что x имеет значение false в логическом контексте,

x || null //Result=>null

Итак, мы можем заключить оповещение покажет ноль

1 голос
/ 21 марта 2019

изменить чек с (x || null) на x !== null ? x : null

, поскольку 0 ложно, но не равно нулю

0 голосов
/ 21 марта 2019

Если вы хотите убедиться, что значение по умолчанию x должно быть null, если ничего не передано, вы можете сделать это

function foo(x: number | null = null): void {
  alert(x);
}

foo(0);
...