TypeScript diferencia entre tipos primitivos (string, number, boolean) y sus envolturas objetuales (String, Number, Boolean). Las envolturas son objetos creados a través de constructores:
const primitive: string = 'hola'; const wrapper: String = new String('hola');
primitive === wrapper — el resultado es false:console.log('hola' === new String('hola')); // false
string, no String).¿Se pueden usar tipos envolventes (
String,Number,Boolean) en interfaces TypeScript si los valores son primitivos?
Respuesta: No se recomienda usar envolturas: en la mayoría de los casos, los valores serán primitivos, y la herencia directa de la interfaz del tipo envolvente dará lugar a errores. Es mejor usar siempre string, number, boolean.
Historia
En una aplicación web para almacenar nombres y apellidos, se utilizó el tipo String en la interfaz del usuario. Esto provocó errores de comparación y fallos en las pruebas unitarias que requerían tipos idénticos (los primitivos y sus envolturas difieren en identidad).
Historia
Un desarrollador de bibliotecas tipificó una función genérica a través de Number, y los clientes de la biblioteca pasaron valores primitivos, lo que causó problemas con el método de guardianes de tipos que inesperadamente no funcionaron para primitivos. Surgió un complejo error de conversión de tipos para depurar.
Historia
En un servicio analítico, se utilizó el tipo Boolean para una bandera de actividad del usuario, y el resultado de la comparación durante la filtración de datos siempre fue false, aunque visualmente los valores coincidían. Esto causó un tratamiento incorrecto de los datos y el colapso de los informes.