configuración - ¿Cómo hacer que TypeScript lance un error en tiempo de ejecución cuando falla una afirmación de no nulo?
¿Existe una configuración para hacer que TypeScript compile las afirmaciones de no nulo en JavaScript que generen un error?
Por defecto, la afirmación de no nulo se descarta (playground):
// Typescript:
function foo(o: {[k: string]: string}) {
return "x is " + o.x!
}
console.log(foo({y: "ten"}))
// Compiled into this js without warnings:
function foo(o) {
return "x is " + o.x;
}
console.log(foo({ y: "ten" }));
// output: "x is undefined"
Quiero una configuración o extensión o algo que haga que se compile en esto:
function foo(o) {
if (o.x == null) { throw new Error("o.x is not null") }
// console.assert(o.x != null) would also be acceptable
return "x is " + o.x;
}
¿Hay alguna manera de convertir las afirmaciones de signo de exclamación no nulas en afirmaciones o errores de JavaScript?
Respuesta #1
No.
La afirmación de no nulo le está diciendo específicamente al compilador que tú sabes mejor que él. Es puramente un constructo para gestionar información de tipos. Pero si no sabes mejor que el compilador, entonces tendrás que manejarlo tú mismo.
Esta es una característica que es mejor evitar por completo por el bien de la seguridad de tipos (excepto en raras ocasiones donde puedes estar 100% seguro de que el valor no es nulo), e incluso hay algo de ayuda de eslint para informarte que es peligrosa en la regla no-non-null-assertion
La buena noticia, supongo, es que si afirmaste que el valor no es nulo, pero es nulo, entonces tu programa probablemente terminará fallando de todos modos, en algún lugar...
Respuesta #2
Una opción es escribir la tuya propia como una macro, usando algo como macro-ts. Una función así nunca estará en TypeScript, ya que el proyecto se centra exclusivamente en la verificación de tipos en tiempo de compilación (estática), como explicó Alex Wayne.