Null vs. Undefined
JavaScript (e, por extensão, TypeScript ) tem dois tipos inferiores: null
e undefined
. Eles têm a intenção de significar coisas diferentes:
Algo não foi inicializado:
undefined
.Algo está indisponível no momento:
null
.
Verificando para qualquer
Fato é que você precisará lidar com ambos. Para esse caso usamos simplesmente o ==
para checar.
Recomendo == null
para verificar ambos undefined
ou null
. Você geralmente não quer fazer uma distinção entre os dois.
Uma exceção, os valores indefinidos no nível raiz que discutiremos a seguir.
Verificando nível de raiz undefined
Lembre-se de como eu disse que você deveria usar == null
. Claro que sim (porque acabei de dizer ^ ). Não o use para coisas no nível da raiz. No modo strict, se você usa foo
e foo
como undefined, você obtém uma exceção ReferenceError
e toda a pilha de chamadas é desativada.
Você deve usar o modo strict ... e, de fato, o compilador TS o inserirá para você se você usar os módulos ... mais sobre isso mais tarde no livro, assim você não tem que ser explícito sobre isso :)
Então, para verificar se uma variável é definida ou não em um nível global você normalmente usa typeof
:
Limite o uso explícito de undefined
undefined
Como o TypeScript oferece a oportunidade de documentar suas estruturas separadamente dos valores, em vez de coisas como:
você deve usar uma anotação de tipo:
Estilos de callbacks no Node
As funções de retorno de chamada ou callbacks no node(por exemplo, (err, somethingElse) => {/* something */}
) são geralmente chamadas com err
definido como null
se não houver um erro. Você geralmente usa uma verificação de verdade para isso de qualquer maneira:
Ao criar suas próprias APIs, é normal usar null
nesse caso para obter consistência. Com toda a sinceridade para suas próprias APIs, você deve considerar suas promises; nesse caso, você realmente não precisa se preocupar com valores de erro ausentes (você os trata com .then
vs..catch
).
Não use undefined
como meio de denotar validade
undefined
como meio de denotar validadePor exemplo, uma função horrível como esta:
pode ser muito melhor desse jeito:
Considerações finais
A equipe do TypeScript não usa null
: Diretrizes de codificação do TypeScript e não causa nenhum problema. Douglas Crockford acha que null
é uma péssima idéia e todos nós devemos apenas usar undefined
.
No entanto, as bases de código no estilo NodeJS usam null
para argumentos de erro como padrão, pois denota algo está indisponível no momento
. Pessoalmente, não me importo em distinguir entre os dois, pois a maioria dos projetos usa bibliotecas com opiniões diferentes e apenas descarta os dois com == null
.
Last updated