Cuando utilizamos Typescript
es para: tener un constante análisis del código que vamos desarrollando, tener un tipado fuerte, trabajar con un lenguaje de alto nivel, disminuir la cantidad de bugs que solemos generar.
Pero en el transcurso del tiempo en desarrollo de lo que estamos creando, nos encontramos en ocasiones con la necesidad o comodidad de colocar tipos any
a variables. Y esto desactiva esa funcionalidad tan querida de TS de estar verificando nuestro código; vuelves a estar trabajando con JS puro cuando se trata de esa variable y lo dejas vulnerable a bugs.
Hoy aprendí que es mejor utilizar el type unknown
a usar any
. Y este es el por qué...
Cuando declaras una variable de tipo any
. Puedes asignarle cualquier valor de cualquier tipo.
let anyVar: any;
anyVar = true;
anyVar = undefined;
anyVar = null;
anyVar = 1;
anyVar = 'vale';
anyVar = [];
anyVar = {};
Esa variable será tratada como si de JS puro se tratara.
Ej. Si anyVar
almacena un texto. Puedes ejecutar un toUpperCase()
en el momento que desees sin que te salte alguna alerta. (porque estás trabajando con JS tal cuál). El problema es que si deseas ejecutar un método doSomething()
que es un método inexistente, tampoco saltará un error, porque no se verificará ese código.
Aquí entra la alternativa a usar para evitar esto y prevenir futuros bugs
.
Unknown Type
Este tipo de dato también puede inicializarse con datos de cualquier tipo.
let unknownVar: unknown;
unknownVar = true;
unknownVar = undefined;
unknownVar = null;
unknownVar = 1;
unknownVar = 'vale';
unknownVar = [];
unknownVar = {};
Sin embargo, cuando quieras tratar un tipo Unknown type con cualquier otro, tendrás que verificarlo primero antes de poder usarlo o te saltarán alertas.
Ej. toUpperCase()
es un método de string
. Pero al ser de tipo unknown
. No puedes tratarlo como string
sin antes una verificación de tipo. Cosa que con any
no pediría, simplemente intentaría ejecutar ese método a ciegas, y a expectativa de que sí sea un string
.
Ahora, el método doSomething
tampoco existe. Por lo que nos marca un error. Cosa que no sucede si fuera de tipo any
. Intentaría ejecutarlo aunque no existe y eso ocasionaría un error en tiempo de ejecución.
Entonces, ¿cómo ejecutar el método toUpperCase()
?
Tenemos que verificar que sí es un string
el tipo de dato que contiene la variable unknown
if (typeof unknownVar === 'string') {
unknownVar.toUpperCase();
}
Se verifica con la función typeof
y dentro de ese scope se podrá ejecutar la función, sin problema alguno.
Usar el tipo unknown
nos ayuda a minimizar futuros errores, siempre obligándonos a verificar que el tipo de dato que contiene dentro esa variable unknown
es del tipo de dato como queremos tratarla.
Siempre que puedas evitar usar any
, hazlo.
Notas del Curso de Typescript: Tipos Avanzados y Funciones - @Platzi
Top comments (0)