Typescript: объект, возможно, имеет значение null в выражении сравнения

Я получаю TS18047 при сравнении, где ложный результат нулевого сравнения является желаемым результатом.

Итак, в основном:

const a: number | null = null;
if (a >= 250) { /* will not execute because result of comparison is false */ }

Это то, что я хочу. и этот код также работал до того, как я представил машинопись.

Я знаю, что мог бы просто сделать нулевую проверку, но есть около десяти ветвей, сравнивающих эту переменную с различными числами.

Только последний else обрабатывает фактическое нулевое значение.

Должен ли я на самом деле проверять значение null или я могу уклониться от этого?

Почему бы вам просто не проверить null в первом условии if...?

vera. 10.01.2023 16:29

Если у вас есть похожие ветки, сначала проверьте null, а не конец. В противном случае вам придется проверять перед каждым сравнением. Это именно то, для чего предназначен TypeScript, чтобы вы не могли случайно сделать ошибки типа. Вы можете уклониться от этого (a! >= 250 говорит TypeScript, что a не может быть null в данный момент, и что он должен заткнуться), но вы действительно, действительно не должны, если только вы точно не знаете, что a не может быть null, несмотря на декларацию и отсутствие чека.

Amadan 10.01.2023 16:29

@Amadan: это должен быть ответ. Это лучше объяснено, чем у Шона.

velis 11.01.2023 06:34
Принципы SOLID в JavaScript с примерами
Принципы SOLID в JavaScript с примерами
Принцип единой ответственности подразумевает то, что:
Типы привязки данных в Angular
Типы привязки данных в Angular
Привязка данных автоматически поддерживает страницу в актуальном состоянии на основе состояния вашего приложения. Вы используете привязку данных,...
3 паттерна TypeScript, которые я использую в своей повседневной работе
3 паттерна TypeScript, которые я использую в своей повседневной работе
В TypeScript 2.0 в язык был добавлен модификатор readonly.
Мифический Angular - Миф Angular: стили компонентов
Мифический Angular - Миф Angular: стили компонентов
Это очень короткая и интересная для меня тема. В Angular каждый компонент может иметь свои собственные прикрепленные стили. Стили могут находиться в...
Подсказка RxJS [filter, skipWhile]
Подсказка RxJS [filter, skipWhile]
Эта подсказка описывает разницу между операторами filter и skipWhile из библиотеки RxJS .
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
1
3
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ну, технически это должно работать, потому что вы не можете сравнить что-то, что равно нулю, с числом, потому что оно всегда будет ложным, поэтому вам нужно сначала проверить его на нуль.

if (a && a >= 250) {
      // do something

 }

Это также будет работать, но это не лучшая практика, потому что это противоречит цели машинописного текста.

    if (a! >= 250) {
      // do something

 }

Метод typeof иногда работал для меня.

if (typeof a == 'number' && a >= 250) {
        //do something 
}

Я понимаю, как это может работать, но в гораздо более сложных случаях, чем мой.

velis 11.01.2023 06:36

Другие вопросы по теме