La Afirmación de Tipo (Type Assertion) es una manera para que el desarrollador le indique al compilador de TypeScript cómo debe interpretar el tipo de un valor. La sintaxis:
let someValue: any = "ejemplo"; let strLen: number = (someValue as string).length;
La Afirmación de Tipo no convierte los datos en tiempo de ejecución, solo sugiere al compilador su tipo. Si la afirmación es incorrecta, el programa no se detendrá, lo que puede llevar a errores en tiempo de ejecución. A diferencia del "casting" en C# o Java, TypeScript no realiza ninguna conversión.
Al usarlo, no se puede hacer una afirmación entre tipos no relacionados directamente (por ejemplo, as number as User), pero hay formas de sortearlo usando as unknown.
¿Es seguro usar afirmaciones dobles
value as unknown as Typepara convertir un valor a otro tipo?
Respuesta incorrecta: Sí, es seguro, porque es lo que la mayoría de los desarrolladores de TypeScript hacen.
Respuesta correcta: No, es peligroso. Este método elude las comprobaciones del compilador y permite convertir cualquier tipo en cualquier otro, eludiendo la tipificación, lo que puede llevar a errores en tiempo de ejecución. Úsalo solo si estás seguro de que el valor es realmente compatible con el tipo objetivo.
Historia
Un desarrollador hizo una Afirmación de Tipo para un objeto de una API externa como si fuera su propia interfaz (
as MyType), sin verificar los campos. La API cambió su estructura, y la aplicación comenzó a fallar al acceder a claves inexistentes.
Historia
En una biblioteca para trabajar con el DOM, alguien hizo una doble afirmación
el as unknown as HTMLElement, sin asegurarse del tipo, y más tarde recibía un error al intentar llamar a métodos de HTMLElement en otro objeto.
Historia
En un intento de resolver un error de tipos al integrarse con código JS, uno de los desarrolladores aplicó
as anya la configuración. Esto enmascaró el problema, y un error con el tratamiento incorrecto de datos solo surgía en producción.