validar operator typescript

typescript - operator - undefined or null



¿Hay alguna manera de verificar tanto `null` como` undefined`? (19)

¿TypeScript tiene una función dedicada o sintaxis de azúcar para este

No. Acabo de hacer something == null igual que JavaScript.

Dado que TypeScript está fuertemente tipado, simplemente usar if () {} para verificar nulo e indefinido no suena bien.

¿TypeScript tiene una función dedicada o sintaxis de azúcar para esto?


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.

// bad-file.ts console.log(message)

Obtendrá un error que dice que el message variable no está definido (también conocido como no declarado), por supuesto, el compilador de Script no debería permitirle hacer eso, pero REALMENTE nada puede impedirlo.

// evil-file.ts // @ts-gnore console.log(message)

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

if ( message != null ) { // do something with the message }

el código anterior verificará si es null e undefined , PERO en caso de que la variable del message no esté declarada (por seguridad), puede considerar el siguiente código

if ( typeof(message) !== ''undefined'' && message !== null ) { // message variable is more than safe to be used. }

Nota: el orden aquí typeof(message) !== ''undefined'' && message !== null es muy importante, primero debe verificar el estado undefined contrario será igual que message != null Null, gracias @Jaider.


Dado 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() .

var foo:string; if(!foo){ foo="something"; }

Argumentos

valor (*): El valor a verificar.

Devoluciones

(booleano) : Devuelve verdadero si el valor es nulo, de lo contrario falso.

Ejemplo

_.isNil(null); // => true _.isNil(void 0); // => true _.isNil(NaN); // => false

Enlazar

Docs Lodash


Es posible que desee probar

if(data){}

con !! .

Explicación

El primero ! convertirá su expresión en un valor boolean .

Entonces !someValue es true si someValue es falso y false si someValue es verdadero . Esto puede ser confuso.

Al agregar otro ! , la expresión ahora es true si someValue es verdadero y false si someValue es falso , lo cual es mucho más fácil de administrar.

Discusión

Ahora, ¿por qué me molesto con if (!!someValue) cuando algo como if (someValue) me hubiera dado el mismo resultado?

Porque !!someValue es precisamente una expresión booleana, mientras que someValue podría ser absolutamente cualquier cosa. Este tipo de expresión ahora permitirá escribir funciones (y Dios las necesitamos) como:

if(!!someValue)

en lugar de:

isSomeValueDefined(): boolean { return !!someValue }

Espero que ayude.


Hice diferentes pruebas en el patio de juegos mecanografiado:

http://www.typescriptlang.org/play/

let a; let b = null; let c = ""; var output = ""; if (a == null) output += "a is null or undefined/n"; if (b == null) output += "b is null or undefined/n"; if (c == null) output += "c is null or undefined/n"; if (a != null) output += "a is defined/n"; if (b != null) output += "b is defined/n"; if (c != null) output += "c is defined/n"; if (a) output += "a is defined (2nd method)/n"; if (b) output += "b is defined (2nd method)/n"; if (c) output += "c is defined (2nd method)/n"; console.log(output);

da:

a is null or undefined b is null or undefined c is defined

entonces:

  • comprobar si (a == nulo) es correcto para saber si a es nulo o indefinido
  • comprobar si (a! = null) es correcto para saber si se define a
  • comprobar si (a) es incorrecto para saber si se define a

Para Typescript 2.xx debe hacerlo de la siguiente manera (usando type guard ):

tl; dr

function isDefined<T>(value: T | undefined | null): value is T { return <T>value !== undefined && <T>value !== null; }

¿Por qué?

De esta manera, isDefined() respetará el tipo de variable y el siguiente código sabría tener en cuenta esta verificación.

Ejemplo 1 - verificación básica:

function getFoo(foo: string): void { // } function getBar(bar: string| undefined) { getFoo(bar); //ERROR: "bar" can be undefined if (isDefined(bar)) { getFoo(bar); // Ok now, typescript knows that "bar'' is defined } }

Ejemplo 2 - respeto de tipos:

function getFoo(foo: string): void { // } function getBar(bar: number | undefined) { getFoo(bar); // ERROR: "number | undefined" is not assignable to "string" if (isDefined(bar)) { getFoo(bar); // ERROR: "number" is not assignable to "string", but it''s ok - we know it''s number } }


Por lo general, hago el control de malabarismo como Fenton ya discussed . Para hacerlo más legible, puede usar isNil de ramda.

import * as isNil from ''ramda/src/isNil''; totalAmount = isNil(totalAmount ) ? 0 : totalAmount ;


Si desea pasar tslint sin establecer strict-boolean-expressions en allow-null-union o allow-undefined-union , debe usar isNullOrUndefined del isNullOrUndefined de isNullOrUndefined del node o rodar el suyo propio:

// tslint:disable:no-null-keyword export const isNullOrUndefined = <T>(obj: T | null | undefined): obj is null | undefined => { return typeof obj === "undefined" || obj === null; }; // tslint:enable:no-null-keyword

No es exactamente el azúcar sintáctico, pero es útil cuando las reglas de tslint son estrictas.


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 strictNullChecks para indicarle al compilador que se strictNullChecks con posibles valores nulos o indefinidos. Si configura esta opción, y luego hay una situación en la que desea permitir valores nulos e indefinidos, puede definir el tipo como Type | null | undefined Type | null | undefined Type | null | undefined


Siempre lo escribo así:

var foo:string; if(!foo){ foo="something"; }

Esto funcionará bien y creo que es muy legible.


Tarde para unirse a este hilo, pero encuentro este truco de JavaScript muy útil para verificar si un valor no está definido

if(typeof(something) === ''undefined''){ // Yes this is undefined }



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:

var x = { name: "Homer", LastName: "Simpson" }; var y = { name: "Marge"} ; var z = { name: "Bart" , LastName: undefined} ; var a = { name: "Lisa" , LastName: ""} ; var hasLastNameX = x.LastName != null; var hasLastNameY = y.LastName != null; var hasLastNameZ = z.LastName != null; var hasLastNameA = a.LastName != null; alert (hasLastNameX + '' '' + hasLastNameY + '' '' + hasLastNameZ + '' '' + hasLastNameA); var hasLastNameXX = x.LastName !== null; var hasLastNameYY = y.LastName !== null; var hasLastNameZZ = z.LastName !== null; var hasLastNameAA = a.LastName !== null; alert (hasLastNameXX + '' '' + hasLastNameYY + '' '' + hasLastNameZZ + '' '' + hasLastNameAA);

Salir:

true , false, false , true (in case of !=) true , true, true, true (in case of !==) => so in this sample not the correct answer

enlace plunkr: https://plnkr.co/edit/BJpVHD95FhKlpHp1skUE


Tuve este problema y algunas de las respuestas funcionan bien para JS pero no para TS , esta es la razón.

//JS let couldBeNullOrUndefined; if(couldBeNullOrUndefined == null) { console.log(''null OR undefined'', couldBeNullOrUndefined); } else { console.log(''Has some value'', couldBeNullOrUndefined); }

Eso es todo bueno ya que JS no tiene tipos

//TS let couldBeNullOrUndefined?: string | null; // THIS NEEDS TO BE TYPED AS undefined || null || Type(string) if(couldBeNullOrUndefined === null) { // TS should always use strict-check console.log(''null OR undefined'', couldBeNullOrUndefined); } else { console.log(''Has some value'', couldBeNullOrUndefined); }

En TS, si la variable no se definió con null cuando intenta verificar ese null tslint | El compilador se quejará.

//tslint.json ... "triple-equals":[true], ...

let couldBeNullOrUndefined?: string; // to fix it add | null Types of property ''couldBeNullOrUndefined'' are incompatible. Type ''string | null'' is not assignable to type ''string | undefined''. Type ''null'' is not assignable to type ''string | undefined''.


Una notación más rápida y más corta para null comprobaciones null puede ser:

value == null ? "UNDEFINED" : value

Esta línea es equivalente a:

if(value == null) { console.log("UNDEFINED") } else { console.log(value) }

Especialmente cuando tienes muchos cheques null , es una buena notación corta.


Usando un chequeo de malabarismo, puede probar tanto null como undefined en un solo golpe:

if (x == null) {

Si usa una verificación estricta, solo será verdadero para los valores establecidos en null y no se evaluará como verdadero para las variables indefinidas:

if (x === null) {

Puedes probar esto con varios valores usando este ejemplo:

var a: number; var b: number = null; function check(x, name) { if (x == null) { console.log(name + '' == null''); } if (x === null) { console.log(name + '' === null''); } if (typeof x === ''undefined'') { console.log(name + '' is undefined''); } } check(a, ''a''); check(b, ''b'');

Salida

"a == nulo"

"a no está definido"

"b == nulo"

"b === nulo"


puedes usar

_.isNil(null); // => true _.isNil(void 0); // => true _.isNil(NaN); // => false


if( value ) { }

se evaluará como true si el value no es:

  • null
  • undefined
  • NaN
  • cadena vacía ''''
  • 0
  • false

El mecanografiado incluye reglas de JavaScript.


isSomeValueDefined(): boolean { if(someValue) { return true } return false }

es malo! datos

  • nulo
  • indefinido
  • falso
  • ....