Estoy usando la marca strictNullChecks en mi proyecto de TypeScript.

Considere la siguiente función:

function hello(a: string | null) {
  if (a !== null) {
    console.log(a.length); // Here, "a" can only be a string
  }
}

El compilador funciona perfectamente aquí.

Sin embargo, si escribo if (typeof a !== "null") o incluso lodash if (!_.isNull(a)), el compilador no lo entenderá y se quejará de que a posiblemente puede ser null.

¿Hay alguna forma de que estas sintaxis alternativas funcionen también?

0
Guilhem Soulas 13 dic. 2016 a las 22:14
¿De verdad leíste lo que hace esta bandera del compilador? typescriptlang.org/docs/handbook/compiler-options.html
 – 
Fals
13 dic. 2016 a las 22:19
Además: typeof (a = null) === "object" por motivos heredados
 – 
Emile Bergeron
13 dic. 2016 a las 22:32
Se actualizaron los tipos de lodash y if (!_.isNull(a)) debería hacer una protección de tipo adecuada ahora
 – 
AJ Richardson
15 abr. 2017 a las 01:40

1 respuesta

La mejor respuesta

Sin embargo, si escribo en su lugar if (typeof a !== "null") o ... el compilador no entenderá y se quejará de que posiblemente a puede ser nulo.

Esto es bueno porque typeof null === "object", no "null". TypeScript no considera correctas las formas de prueba que no funcionan para null.

2
Ryan Cavanaugh 13 dic. 2016 a las 22:47
Gracias por recordarme que if (typeof a !== "null") no es un buen enfoque. Supongo que usaré a !== null a partir de ahora.
 – 
Guilhem Soulas
14 dic. 2016 a las 03:00