Dado que TypeScript está fuertemente tipado, simplemente se usa if () {}para verificar nully undefinedno suena bien.
¿TypeScript tiene alguna función dedicada o sintaxis de azúcar para esto?
typescript
null-check
David Liu
fuente
fuente

Since TypeScript is strongly-typedNo pude encontrar esto en él de documentos y no tengo dudas al respecto ...Respuestas:
Usando un chequeo de malabarismo, puede probar ambos
nullyundefinedde una sola vez:Si usa una verificación estricta, solo será cierto para los valores establecidos en
nully no se evaluará como verdadero para las variables indefinidas:Puedes probar esto con varios valores usando este ejemplo:
Salida
fuente
"false" == falseuna cadena no vacía como "falso" se evalúatrue.if(x)estilo verdadero / falso , pero noif(x == null), que solo atrapanullyundefined. Verifíquelo usandovar c: number = 0; check(c, 'b');no es "nully"null, oundefined.evaluará
truesivalueno es:nullundefinedNaN''0falseEl mecanografiado incluye reglas de JavaScript.
fuente
TypeScript comprende completamente la versión de JavaScript que es
something == null.TypeScript descartará correctamente ambos
nullyundefinedcon tales comprobaciones.Más
https://basarat.gitbook.io/typescript/recap/null-undefined
fuente
myVar == null. Solo otra opción.== nulles la forma correcta de probar nulo e indefinido.!!somethinges una coerción inútil en un condicional en JS (solo usosomething).!!somethingtambién obligará a 0 y '' a falso, que no es lo que desea hacer si está buscando nulo / indefinido.Hice diferentes pruebas en el patio de juegos mecanografiado:
http://www.typescriptlang.org/play/
da:
entonces:
fuente
Creo que esta respuesta necesita una actualización, consulte el historial de edición de la respuesta anterior.
Básicamente, tiene tres casos deferentes nulos, indefinidos y no declarados, vea el fragmento a continuación.
Obtendrá un error que dice que la variable
messageno está definida (también conocida como no declarada), por supuesto, el compilador de Script no debería permitirle hacer eso, pero REALMENTE nada puede impedirlo.El compilador estará encantado de compilar el código anterior. Entonces, si está seguro de que todas las variables están declaradas, simplemente puede hacerlo
el código anterior verificará
nullyundefined, PERO en caso de que lamessagevariable no esté declarada (por seguridad), puede considerar el siguiente códigoNota: el pedido aquí
typeof(message) !== 'undefined' && message !== nulles muy importante,undefinedprimero debe verificar el estado, de lo contrario será el mismo quemessage != null, gracias @Jaider.fuente
if(typeof something !== 'undefined' && something !== null){...}En TypeScript 3.7 ahora tenemos encadenamiento opcional y fusión nula para verificar nulos e indefinidos al mismo tiempo, por ejemplo:
este código verificará si foo está definido; de lo contrario, volverá indefinido
antigua manera :
esta:
Con encadenamiento opcional será:
Otra característica nueva es Nullish Coalescing , por ejemplo:
vieja forma:
fuente
Es posible que desee probar
con
!!.Explicación
El primero
!convertirá tu expresión en unbooleanvalor.Entonces
!someValueestruesisomeValuees falso yfalsesisomeValuees verdadero . Esto puede ser confuso.Al agregar otro
!, la expresión ahora estruesisomeValuees verdadero yfalsesisomeValuees falso , lo cual es mucho más fácil de administrar.Discusión
Ahora, ¿por qué me molesto
if (!!someValue)cuando algo asíif (someValue)me hubiera dado el mismo resultado?Porque
!!someValuees precisamente una expresión booleana, mientras quesomeValuepodría ser absolutamente cualquier cosa. Este tipo de expresión ahora permitirá escribir funciones (y Dios las necesitamos) como:en vez de:
Espero que ayude.
fuente
!!'false'está hechotrueporque'false'es una cadena válidaPara ello
Typescript 2.x.x, debe hacerlo de la siguiente manera (usando type guard ):tl; dr
¿Por qué?
De esta forma
isDefined()se respetará el tipo de variable y el siguiente código sabría tener en cuenta este cheque.Ejemplo 1 - verificación básica:
Ejemplo 2 - respeto de tipos:
fuente
es malo! datos
fuente
trueofalsesolo. Si tiene un valor booleano con unanullasignación o unundefinedvalor, en ambos casos el valor se evaluará comofalse.Si está utilizando TypeScript, es un mejor enfoque dejar que el compilador verifique si hay valores nulos e indefinidos (o la posibilidad de que existan), en lugar de verificarlos en tiempo de ejecución. (Si desea verificar en tiempo de ejecución, entonces, como indican muchas respuestas, simplemente use
value == null).Use la opción de compilación
strictNullCheckspara indicarle al compilador que se asfixie ante posibles valores nulos o indefinidos. Si se establece esta opción, y luego hay una situación en la que no desea permitir nula y sin definir, se puede definir el tipoType | null | undefined.fuente
Si desea pasar
tslintsin fijarstrict-boolean-expressionsaallow-null-unionoallow-undefined-union, es necesario el usoisNullOrUndefineddenode'sutilmódulo o hágalo usted mismo:No es exactamente el azúcar sintáctico, pero es útil cuando las reglas de tslint son estrictas.
fuente
Una notación más rápida y más corta para los
nullcontroles puede ser:Esta línea es equivalente a:
Especialmente cuando tienes mucho
nullcheque, es una buena notación corta.fuente
Tuve este problema y algunas de las respuestas funcionan bien,
JSpero estaTSes la razón.Eso es todo bueno ya que JS no tiene tipos
En TS si la variable no se definió con
nullcuando intenta comprobar quenulleltslint| El compilador se quejará.fuente
Tarde para unirse a este hilo, pero encuentro este truco de JavaScript muy útil para verificar si un valor no está definido
fuente
Por lo general, hago el control de malabarismo como Fenton ya discutió . Para que sea más fácil de leer, puede utilizar isNil de Ramda.
fuente
Como forma detallada, si desea comparar valores nulos e indefinidos SOLAMENTE , use el siguiente código de ejemplo como referencia:
Si
incomingValueno se declara, TypeScript debería devolver una excepción. Si esto se declara pero no se define,console.log()devolverá "El valor entrante es: indefinido". Tenga en cuenta que no estamos utilizando el operador estricto igual.La forma "correcta" (verifique las otras respuestas para más detalles), si el
incomingValueno es unbooleantipo, simplemente evalúe si su valor es verdadero, esto se evaluará de acuerdo con el tipo constante / variable. Unatruecadena debe definirse explícitamente como una cadena que utiliza la= ''asignación. Si no, se evaluará comofalse. Verifiquemos este caso usando el mismo contexto:fuente
puedes usar
fuente
Todas,
La respuesta con más votos no funciona realmente si está trabajando con un objeto. En ese caso, si una propiedad no está presente, el cheque no funcionará. Y ese fue el problema en nuestro caso: vea esta muestra:
Salir:
enlace plunkr: https://plnkr.co/edit/BJpVHD95FhKlpHp1skUE
fuente
null. Pruebe esto: plnkr.co/edit/NfiVnQNes1p8PvXd1fCG?p=previewDado que TypeScript es un superconjunto mecanografiado de ES6 JavaScript. Y lodash son una biblioteca de javascript.
El uso de lodash para verificar si el valor es nulo o indefinido se puede hacer usando
_.isNil().Argumentos
valor (*): El valor a verificar.
Devoluciones
(booleano) : devuelve verdadero si el valor es nulo, de lo contrario falso.
Ejemplo
Enlace
Docs Lodash
fuente
Tenga cuidado si está usando almacenamiento local, puede terminar con la cadena indefinida en lugar del valor indefinido:
La gente puede encontrar esto útil: https://github.com/angular/components/blob/master/src/cdk/coercion/boolean-property.spec.ts
fuente
Siempre lo escribo así:
Esto funcionará bien y creo que es muy legible.
fuente
0también pasa la!fooprueba.undefinedes diferente defalse. Esto es muy común con los parámetros opcionales de la función booleana, donde debe usar el enfoque común de 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. También lo probé en mecanografiado con elvar isTrue:booleanque no estaba definido, y lo mismo si se comprueba. @Gingi, ¿hay algo diferente en lo que intentaste y en lo que yo probé?