Поскольку TypeScript строго типизирован, просто используется if () {}
для проверки null
и undefined
звучит неправильно.
Есть ли в TypeScript какая-либо выделенная функция или синтаксический сахар для этого?
typescript
null-check
Дэвид Лю
источник
источник
Since TypeScript is strongly-typed
Я не смог найти это в его документах, и у меня есть сомнения по этому поводу ...Ответы:
Используя проверку жонглирования, вы можете протестировать
null
иundefined
одно, и одно попадание:Если вы используете строгий контроль, он будет иметь значение true только для значений, установленных
null
и не будет оцениваться как true для неопределенных переменных:Вы можете попробовать это с различными значениями, используя этот пример:
Вывод
источник
"false" == false
непустая строка, такая как "false", оценивается какtrue
.if(x)
стиля истина / фальси , но неif(x == null)
, которые только ловятnull
иundefined
. Проверьте это, используяvar c: number = 0; check(c, 'b');
не "nully"null
, илиundefined
.оценим,
true
еслиvalue
нет:null
undefined
NaN
''
0
false
машинопись включает в себя правила JavaScript.
источник
TypeScript полностью понимает версию JavaScript, которая есть
something == null
.TypeScript будет правильно исключать как
null
иundefined
с такими проверками.Больше
https://basarat.gitbook.io/typescript/recap/null-undefined
источник
myVar == null
. Просто еще один вариант.== null
правильный способ проверки на ноль и неопределенность.!!something
бесполезное принуждение в условном выражении в JS (просто используйтеsomething
).!!something
также приведёт 0 и '' к ложному, что не то, что вы хотите сделать, если вы ищете null / undefined.Я делал разные тесты на площадке для машинописи:
http://www.typescriptlang.org/play/
дает:
так:
источник
Я думаю, что этот ответ нуждается в обновлении, проверьте историю изменений для старого ответа.
По сути, у вас есть три разных случая: null, undefined и undeclared, см. Фрагмент ниже.
Вы получите сообщение об ошибке, в котором говорится, что переменная
message
не определена (она же не объявлена), конечно, компилятор Typescript не должен позволять вам это делать, но ДЕЙСТВИТЕЛЬНО ничто не может помешать вам.Компилятор будет рад просто скомпилировать код выше. Итак, если вы уверены, что все переменные объявлены, вы можете просто сделать это
приведенный выше код проверит наличие
null
иundefined
, НО, еслиmessage
переменная может быть необъявленной (для безопасности), вы можете рассмотреть следующий кодПримечание: порядок здесь
typeof(message) !== 'undefined' && message !== null
очень важен, вы должныundefined
сначала проверить состояние, так как оно будет таким же, какmessage != null
, спасибо @Jaider.источник
if(typeof something !== 'undefined' && something !== null){...}
В TypeScript 3.7 у нас теперь есть Optional Chaining и Nullish Coalescing, чтобы проверять null и undefined одновременно, например:
этот код проверит, определен ли foo, иначе вернет undefined
старый способ :
это:
При необязательном сцеплении будет:
Еще одна новая функция - Nullish Coalescing , пример:
старый способ:
источник
Вы можете попробовать
с
!!
.объяснение
Первый
!
превратит ваше выражение вboolean
значение.Тогда
!someValue
,true
еслиsomeValue
это ложь, иfalse
еслиsomeValue
это правда . Это может сбивать с толку.При добавлении другого
!
, выражение теперь ,true
еслиsomeValue
это truthy иfalse
еслиsomeValue
это falsy , что намного легче управлять.обсуждение
Теперь, почему я беспокоюсь,
if (!!someValue)
когда что-то подобноеif (someValue)
дало бы мне тот же результат?Потому что
!!someValue
это как раз логическое выражение, тогда какsomeValue
может быть абсолютно любым. Этот вид выражения теперь будет позволять писать функции (и Бог нам это нужен), такие как:вместо:
Я надеюсь, что это помогает.
источник
!!'false'
на деле,true
потому что'false'
это допустимая строкаДля этого
Typescript 2.x.x
вы должны сделать это следующим образом (используя тип защиты ):ТЛ; др
Почему?
Таким образом,
isDefined()
будет учитываться тип переменной, и следующий код будет знать, принять эту проверку во внимание.Пример 1 - базовая проверка:
Пример 2 - типы уважения:
источник
это значит! данные
источник
true
илиfalse
только. Если у вас есть логическое значение сnull
присваиванием илиundefined
значением, в обоих случаях значение будет оцениваться какfalse
.Если вы используете TypeScript, лучше подходить к компилятору, чтобы он проверял наличие нулей и неопределенных значений (или возможность этого), а не проверял их во время выполнения. (Если вы хотите проверить во время выполнения, то, как указывают многие ответы, просто используйте
value == null
).Используйте опцию compile,
strictNullChecks
чтобы сообщить компилятору о возможных пустых или неопределенных значениях. Если вы установите этот параметр, а затем возникает ситуация , когда вы действительно хотите , чтобы нуль и неопределенным, вы можете определить тип , какType | null | undefined
.источник
Если вы хотите передать
tslint
без установкиstrict-boolean-expressions
наallow-null-union
илиallow-undefined-union
, вам нужно использоватьisNullOrUndefined
отnode
«sutil
модуля или свернуть свой собственный:Не совсем синтаксический сахар, но полезный, когда ваши правила tslint строги.
источник
Более быстрое и короткое обозначение для
null
чеков может быть:Эта строка эквивалентна:
Особенно, когда у вас много
null
проверок, это хорошая короткая запись.источник
У меня была эта проблема, и некоторые из ответов прекрасно работают,
JS
но неTS
здесь, это причина.Это все хорошо, так как JS не имеет типов
В ТС , если переменная не была определена с ,
null
когда вы пытаетесь проверить , что | Компилятор будет жаловаться.null
tslint
источник
Поздно присоединиться к этой теме, но я считаю, что этот хак JavaScript очень удобен при проверке, является ли значение неопределенным
источник
Обычно я делаю жонглирование, как уже обсуждал Фентон . Чтобы сделать его более читабельным, вы можете использовать isNil из ramda.
источник
Как многословным образом, если вы хотите сравнить нулевые и неопределенные значения ТОЛЬКО , используйте следующий пример кода для справки:
Если
incomingValue
не объявлено, TypeScript должен вернуть исключение. Если это объявлено, но не определено,console.log()
будет возвращено «Входящее значение: undefined». Обратите внимание, что мы не используем оператор строгого равенства.«Правильный» способ (проверьте другие ответы для деталей), если
incomingValue
это неboolean
тип, просто оцените, если его значение истинно, это будет оценено в соответствии с типом константы / переменной.true
Строка должна быть определена в явном виде строки с использованием= ''
ассигнования. Если нет, он будет оценен какfalse
. Давайте проверим этот случай, используя тот же контекст:источник
ты можешь использовать
источник
Все,
Ответ, набравший наибольшее количество голосов, на самом деле не работает, если вы работаете с объектом. В этом случае, если свойство отсутствует, проверка не будет работать. И это было проблемой в нашем случае: посмотрите этот пример:
Результат:
ссылка на plunkr: https://plnkr.co/edit/BJpVHD95FhKlpHp1skUE
источник
null
. Попробуйте это: plnkr.co/edit/NfiVnQNes1p8PvXd1fCG?p=previewПоскольку TypeScript является типизированным надмножеством JavaScript ES6. И lodash - это библиотека javascript.
Использование lodash для проверки, является ли значение пустым или неопределенным, может быть выполнено с помощью
_.isNil()
.аргументы
значение (*): значение для проверки.
Возвращает
(логическое значение) : возвращает значение true, если значение равно нулю, иначе значение false.
пример
Ссылка на сайт
Lodash Docs
источник
осторожно, если вы используете локальное хранилище, вы можете получить строку undefined вместо значения undefined:
Люди могут найти это полезным: https://github.com/angular/components/blob/master/src/cdk/coercion/boolean-property.spec.ts
источник
Я всегда пишу это так:
Это будет хорошо работать, и я думаю, что это очень читабельно.
источник
0
также проходит!foo
тест.undefined
отличается отfalse
. Это очень часто встречается с необязательными параметрами булевых функций, где вы должны использовать общий подход JavaScript:function fn(flag?: boolean) { if (typeof flag === "undefined") flag = true; /* set default value */ }
var isTrue; if(isTrue)//skips, if(!isTrue)// enters if(isTrue === undefined)//enters
. Также попробовал это в машинописи, сvar isTrue:boolean
которой был неопределен, и то же самое, если проверяет. @ Джинги, есть что-то другое в том, что ты пробовал и что я пробовал?