Búsqueda de sitios web

¿Por qué TypeScript permite verificar contra undefined?


En el siguiente ejemplo, la variable boolOrNull nunca es indefinida y la condición siempre es verdadera, ¿por qué TypeScript no se queja?

let boolOrNull: boolean | null = null;
if (boolOrNull !== undefined) {
    console.log(123);
}

Respuesta #1

Citando a Ryan Cavanaugh de este problema de GitHub:

Permitimos esto intencionalmente por el bien de la programación defensiva (es decir, defendiendo contra la falta de entradas de código que no es TS). Si hay suficiente demanda, podríamos agregar una bandera o algo así.

Es decir, si tu código en Typescript alguna vez tiene que interactuar con código que no es Typescript, puede que quieras verificar que el código que no es Typescript no proporcione un valor undefined o null donde no se supone que lo haga.

Por supuesto, con la bandera strictNullChecks habilitada, el código de Typescript no permitirá que undefined ocurra aquí, a menos que se use otro código inseguro como acceder a una propiedad ausente en un tipo con una firma de índice. Sin embargo, uno de los principios de diseño de Typescript es que debe acomodar el código idiomático de Javascript, y es bastante normal que los programadores de Javascript comparen valores con undefined o null incluso cuando se supone que esos valores nunca deberían ser undefined o null.

Como sugiere la cita anterior, si una bandera del compilador que habilite verificaciones más estrictas como esta te sería útil, podrías responder al problema enlazado en GitHub para dar tu opinión al respecto.