Como o TypeScript é fortemente digitado, basta usar if () {}
para verificar null
e undefined
não parece certo.
O TypeScript tem alguma função dedicada ou açúcar de sintaxe para isso?
typescript
null-check
David Liu
fonte
fonte
Since TypeScript is strongly-typed
Eu não poderia encontrar este em sua docs e não tenho dúvidas sobre isso ...Respostas:
Usando uma verificação de malabarismo, você pode testar ambos
null
eundefined
em um hit:Se você usar uma verificação estrita, isso só será verdadeiro para valores definidos como
null
e não será avaliado como verdadeiro para variáveis indefinidas:Você pode tentar isso com vários valores usando este exemplo:
Resultado
fonte
"false" == false
uma string não vazia como "false" é avaliada comotrue
.if(x)
verificações de estilo truthy / falsey , mas nãoif(x == null)
, que apenas capturamnull
eundefined
. Verifique sevar c: number = 0; check(c, 'b');
não está "nulo"null
, ouundefined
.avaliará
true
sevalue
não é:null
undefined
NaN
''
0
false
O texto datilografado inclui regras javascript.
fonte
O TypeScript entende completamente a versão do JavaScript que é
something == null
.O TypeScript descartará corretamente ambos
null
eundefined
com essas verificações.Mais
https://basarat.gitbook.io/typescript/recap/null-undefined
fonte
myVar == null
. Apenas outra opção.== null
é a maneira correta de testar nulos e indefinidos.!!something
é uma coerção inútil em um condicional em JS (apenas usesomething
).!!something
também coagirá 0 e '' a falso, o que não é o que você deseja fazer se estiver procurando por nulo / indefinido.Eu fiz testes diferentes no playground tipográfico:
http://www.typescriptlang.org/play/
dá:
tão:
fonte
Acho que esta resposta precisa de uma atualização, verifique o histórico de edições para obter a resposta antiga.
Basicamente, você tem três casos diferidos nulos, indefinidos e não declarados, consulte o trecho abaixo.
Você receberá um erro dizendo que a variável
message
é indefinida (também não declarada); é claro, o compilador Typescript não deve permitir que você faça isso, mas REALMENTE nada pode impedi-lo.O compilador terá prazer em compilar apenas o código acima. Portanto, se você tiver certeza de que todas as variáveis são declaradas, basta fazer isso
o código acima procurará
null
eundefined
, MAS, caso amessage
variável não seja declarada (por segurança), considere o código a seguirNota: a ordem aqui
typeof(message) !== 'undefined' && message !== null
é muito importante, você deve verificarundefined
primeiro o estado; caso contrário, será o mesmo quemessage != null
, graças a @Jaider.fonte
if(typeof something !== 'undefined' && something !== null){...}
No TypeScript 3.7 , agora temos encadeamento opcional e coalescência nula para verificar nulo e indefinido ao mesmo tempo, por exemplo:
este código irá verificar se foo está definido, caso contrário ele retornará indefinido
maneira antiga :
isto:
Com encadeamento opcional será:
outro novo recurso é o Nullish Coalescing , por exemplo:
à moda antiga:
fonte
Você pode tentar
com
!!
.Explicação
O primeiro
!
transformará sua expressão em umboolean
valor.Então
!someValue
étrue
sesomeValue
é falso efalse
sesomeValue
é verdade . Isso pode ser confuso.Ao adicionar uma outra
!
, a expressão agora étrue
sesomeValue
é truthy efalse
sesomeValue
é Falsas , que é muito mais fácil de gerir.Discussão
Agora, por que me incomodo
if (!!someValue)
quando algo assimif (someValue)
me daria o mesmo resultado?Porque
!!someValue
é precisamente uma expressão booleana, enquanto quesomeValue
pode ser absolutamente qualquer coisa. Esse tipo de expressão agora permitirá escrever funções (e Deus precisamos delas) como:ao invés de:
Espero que ajude.
fonte
!!'false'
está em açãotrue
porque'false'
é uma sequência válidaPara
Typescript 2.x.x
você deve fazê-lo da seguinte maneira (usando tipo guarda ):tl; dr
Por quê?
Dessa forma
isDefined()
, respeitará o tipo de variável e o código a seguir saberá levar essa conta em consideração.Exemplo 1 - verificação básica:
Exemplo 2 - os tipos respeitam:
fonte
é mau! dados
fonte
true
oufalse
apenas. Se você tiver um booleano com umanull
atribuição ou umundefined
valor, em ambos os casos, o valor será avaliado comofalse
.Se você estiver usando o TypeScript, é uma abordagem melhor permitir que o compilador verifique nulos e indefinidos (ou a possibilidade deles), em vez de procurá-los em tempo de execução. (Se você deseja verificar em tempo de execução, o número de respostas indicado, basta usar
value == null
).Use a opção de compilação
strictNullChecks
para dizer ao compilador para engasgar com possíveis valores nulos ou indefinidos. Se você definir essa opção, e depois há uma situação onde você não deseja permitir nulos e indefinidos, você pode definir o tipoType | null | undefined
.fonte
Se você quer passar
tslint
sem definirstrict-boolean-expressions
aallow-null-union
ouallow-undefined-union
, você precisa usarisNullOrUndefined
a partirnode
doutil
módulo ou rolar o seu próprio:Não é exatamente um açúcar sintático, mas útil quando suas regras de tslint são rigorosas.
fonte
Uma notação mais rápida e mais curta para
null
verificações pode ser:Esta linha é equivalente a:
Especialmente quando você tem muito
null
cheque, é uma notação curta e agradável.fonte
Eu tive esse problema e algumas das respostas funcionam muito bem,
JS
mas não porTS
aqui é o motivo.Tudo isso é bom, já que JS não tem tipos
Em TS, se a variável não foi definida
null
quando você tenta verificar senull
otslint
| compilador irá reclamar.fonte
Tarde para ingressar neste segmento, mas acho esse hack JavaScript muito útil para verificar se um valor é indefinido
fonte
Normalmente, faço o malabarismo como Fenton já discutiu . Para torná-lo mais legível, você pode usar o isNil do ramda.
fonte
Como uma maneira detalhada, se você deseja comparar SOMENTE valores nulos e indefinidos , use o seguinte código de exemplo para referência:
Se
incomingValue
não for declarado, o TypeScript deve retornar uma exceção. Se isso for declarado, mas não definido,console.log()
retornará "O valor recebido é: indefinido". Observe que não estamos usando o operador estrito igual.A maneira "correta" (verifique as outras respostas para obter detalhes), se
incomingValue
não for umboolean
tipo, basta avaliar se seu valor é verdadeiro, isso será avaliado de acordo com o tipo de constante / variável. Umatrue
string deve ser definida explicitamente como string usando a= ''
atribuição. Caso contrário, será avaliado comofalse
. Vamos verificar este caso usando o mesmo contexto:fonte
você pode usar
fonte
Todos,
A resposta com mais votos não funciona realmente se você estiver trabalhando com um objeto. Nesse caso, se uma propriedade não estiver presente, a verificação não funcionará. E esse foi o problema no nosso caso: veja este exemplo:
Resultado:
Link do plunkr: https://plnkr.co/edit/BJpVHD95FhKlpHp1skUE
fonte
null
. Tente isso: plnkr.co/edit/NfiVnQNes1p8PvXd1fCG?p=previewComo o TypeScript é um superconjunto digitado do JavaScript ES6. E o lodash é uma biblioteca de javascript.
O uso do lodash para verificar se o valor é nulo ou indefinido pode ser feito usando
_.isNil()
.Argumentos
valor (*): o valor a ser verificado.
Devoluções
(booleano) : retorna true se o valor for nulo, caso contrário, false.
Exemplo
Ligação
Lodash Docs
fonte
cuidado se estiver usando armazenamento local, você pode acabar com a sequência indefinida em vez do valor indefinido:
As pessoas podem achar isso útil: https://github.com/angular/components/blob/master/src/cdk/coercion/boolean-property.spec.ts
fonte
Eu sempre escrevo assim:
Isso vai funcionar bem e eu acho que é muito legível.
fonte
0
também passa no!foo
teste.undefined
é diferente defalse
. Isso é muito comum nos parâmetros opcionais da função booleana, nos quais você deve usar a abordagem comum do 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
. Também tentei em texto datilografado com ovar isTrue:boolean
qual era indefinido, e o mesmo se verifica. @ Gingi, há algo diferente sobre o que você tentou e o que eu tentei?