En Typescript, ¿hay alguna diferencia en usar new o no al lanzar (TypeError)?
throw TypeError("some error here")y
throw new TypeError("some error here")?
Esta es más una pregunta de JavaScript que una pregunta de TypeScript. No, no hay diferencia en el resultado técnico, ambos crean nuevos objetos TypeError (detalles en la especificación ). Cuando se llama normalmente (no a través de new ), tanto Error como los diversos constructores de errores "nativos" ( TypeError , ReferenceError , etc.) realizarán una new llamada (una llamada de construcción ) en lugar de una llamada normal.
const e1 = new TypeError("Error message here"); console.log(e1 instanceof TypeError); // true console.log(e1.message); // Error message here const e2 = TypeError("Error message here"); console.log(e2 instanceof TypeError); // true console.log(e2.message); // Error message here Aquí está el mismo código en el área de juegos de TypeScript , que muestra que TypeScript ve tanto e1 como e2 como del tipo TypeError . La razón de esto es que la definición principal de TypeScript para TypeError (en lib.es5.d.ts ) se ve así:
interface TypeError extends Error { } interface TypeErrorConstructor extends ErrorConstructor { new(message?: string): TypeError; (message?: string): TypeError; readonly prototype: TypeError; } declare var TypeError: TypeErrorConstructor; Como puede ver, tiene new(message?: string): TypeError; (llamada al constructor que devuelve TypeError ) y (message?: string): TypeError; (llamada normal que devuelve TypeError ).
Subjetivamente, el uso de new es más claro para los lectores del código, destacando que se está creando un nuevo objeto.