Я получаю TS18047 при сравнении, где ложный результат нулевого сравнения является желаемым результатом.
Итак, в основном:
const a: number | null = null;
if (a >= 250) { /* will not execute because result of comparison is false */ }
Это то, что я хочу. и этот код также работал до того, как я представил машинопись.
Я знаю, что мог бы просто сделать нулевую проверку, но есть около десяти ветвей, сравнивающих эту переменную с различными числами.
Только последний else обрабатывает фактическое нулевое значение.
Должен ли я на самом деле проверять значение null или я могу уклониться от этого?
Если у вас есть похожие ветки, сначала проверьте null, а не конец. В противном случае вам придется проверять перед каждым сравнением. Это именно то, для чего предназначен TypeScript, чтобы вы не могли случайно сделать ошибки типа. Вы можете уклониться от этого (a! >= 250 говорит TypeScript, что a не может быть null в данный момент, и что он должен заткнуться), но вы действительно, действительно не должны, если только вы точно не знаете, что a не может быть null, несмотря на декларацию и отсутствие чека.
@Amadan: это должен быть ответ. Это лучше объяснено, чем у Шона.
Ну, технически это должно работать, потому что вы не можете сравнить что-то, что равно нулю, с числом, потому что оно всегда будет ложным, поэтому вам нужно сначала проверить его на нуль.
if (a && a >= 250) {
// do something
}
Это также будет работать, но это не лучшая практика, потому что это противоречит цели машинописного текста.
if (a! >= 250) {
// do something
}
Метод typeof иногда работал для меня.
if (typeof a == 'number' && a >= 250) {
//do something
}
Я понимаю, как это может работать, но в гораздо более сложных случаях, чем мой.
Почему бы вам просто не проверить null в первом условии if...?