No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Unknown type

5/22
Recursos

El unknown type nos indica que una variable es de un tipo de dato desconocido. Es similar a any, pero sin quitar el an谩lisis de c贸digo est谩tico que nos brinda TypeScript.

El tipo unknown nos fuerza a hacer una verificaci贸n de tipo. Esta es la forma que TypeScript sugiere trabajar con variables de las cuales no sabemos de qu茅 tipo ser谩n. As铆 evitamos utilizar constantemente any.

Unknown type en TypeScript

Usamos el keyword unknown para declarar una variable de este tipo.

let unknownVar: unknown;

Unknown vs. Any

Con any podemos hacer lo que queramos, no hay restricci贸n alguna, pero con unknown vamos a tener advertencias al momento de utilizar alguna funci贸n o m茅todo con variables de este tipo.

let unknownVar: unknown;

unknownVar.toUpperCase(); // Nos marcar谩 el editor una advertencia

Por ejemplo, no podemos directamente aplicar un m茅todo propio de un string a una variable unknown. Para ello debemos realizar una verificaci贸n de tipo para asegurarnos que se ejecutar谩 dicho m茅todo siempre cuando unknownVar sea del tipo string en alg煤n punto del programa:

let unknownVar: unknown;

if (unknownVar === 'string') {
	unknownVar.toUpperCase(); // Ahora ya no nos marcar谩 como error.
}

Unknown en funciones

Tambi茅n podemos emplear unknown en funciones si no sabemos exactamente que nos va a devolver.

const parse = (str: string): unknown => {
	return JSON.parse(str)
}

Com茅ntanos: 驴Qu茅 casos consideras conveniente utilizar el tipo de dato any por sobre unknown a pesar de sus beneficios? 馃

Contribuci贸n creada por: Mart铆n 脕lvarez (Platzi Contributor) con los aportes de Irving Ju谩rez, Axel Enrique Galeed Gutierrez y Franco Daniel Carrara.

Aportes 11

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Unknown type

Este tipo de dato es la mejora de any, ya que nos da la flexibilidad que en ocasiones queremos pero sin apagar por completo el an谩lisis de c贸digo est谩tico. Unknown nos fuerza a hacer una verificaci贸n de tipo.

let foo: unknown = null;

Les comparto mis apuntes. 馃槃

驴Qu茅 hace?

Este nos dice que la variable es desconocida, es similar a any, pero es la forma recomendable de trabajar para evitar any en los casos que sean necesarios.

Diferencias con any

Con any podemos hacer lo que queramos, no hay restricci贸n alguna, pero con unknown vamos a tener advertencias al momento de usar alguna funci贸n o m茅todo con variables de tipo unknown.

Para poder pasar las advertencias tenemos que usar un filtro o realizar una verificaci贸n, una estructura condicional, para poder hacer lo que queremos con esa variable.

Recomendaci贸n

Utilizar unknown siempre por sobre any, pero solo en caso de que sea necesario.

Unknown types

Sabemos que para usar 鈥渃ualquier tipo de dato鈥 podemos usar el tipo any sin embargo, esto es peligroso ya que le indicamos que puede entrar cualquier tipo de dato.

Es por ello que es una muy buena pr谩ctica utilizar el tipo de dato unknown ya que esta nos permite trabajar con cualquier tipo de dato pero en base al tipo de dato podemos asignarla a otra variable o realizar algo en especial.

let x:unknown = 10; 
let v1: number =  x //  Error
let v2: object = x; // Error
let v3: string = x; // Error
let v4: string[] = x; // Error
let v5: {} = x; // Error
let v6: {} | null | undefined = x; // Error
// definimos el tipo 
let v10: number = x as number  // Ok

Tambi茅n nos permite realizar operaciones hasta poder definir un tipo de dato espec铆fico:

function sum(a:unknown, b: number) {
    // comprobando el tipo
    if(typeof a === "number"){
        return a + b
    }
   throw new Error(`La variable '${a}' no es un n煤mero`);
    
}
sum(10,2) // 12
// Error 
sum("hola",2) // La variable 'hola' no es un n煤mero 
sum({a:5},2) // La variable [object Object] no es un n煤mer```

anyVar

ctrl + d
f2
unknown
enter

Usa unknown type. Esto puede colocarte por encima de un dev con experiencia por el sencillo hecho de entender las validaciones en variables.

usar el tipo unknown en lugar de any en caso de ser necesario (tratar de evitar ambis tipos)

Porf铆n conozco lo desconocido

Unknown Type

Material de la clase.

let anyVar :any
;
anyVar = true;
anyVar = undefined;
anyVar = null;
anyVar = 1;
anyVar = [];
anyVar = {}; // <-- anyVar a esta altura es un objeto vacio

let isNew:boolean = anyVar;// 鉂 asigna el tipo boolean a una variable que esta definida como objeto, y esto puede provocar que tus programas fallen

anyVar.doSomething();// 鉂宯o corrige el tipado erroneo, ya que el metodo  doSometing() no existe
anyVar.touppercase();// 鉂宼ampoco corrige typos, ya que en este caso el metodo touppercase esta mal escrito pero al ser any no lo reconoce.

let unknowVar: unknown;

unknowVar = true;
unknowVar = undefined;
unknowVar = null;
unknowVar = 1;
unknowVar = [];
unknowVar = {};

unknowVar.doSomething(); //鉁 reconoce que el metodo no existe. y lo marca como error

// verificacion de tipos
if (typeof unknowVar ==="string") {
  unknowVar.touppercase() //鉁 corrige los errores de typos, en este caso nos advierte que el metodo esta mal escrito.
  unknowVar.toUpperCase(); //鉁 Si se define de entrada que la variable ser谩 un string permite las ayudas de VSC y lo reconoce como string.
}
if (typeof unknowVar ==="boolean") {
  let isNew2:boolean=unknowVar // 鉁 si se hace la verificacion, especificando que la variable ser谩 un booleano entonces no marca error
}
let isNew2:boolean=unknowVar 鉁// si no se hace la verificacion, lo marca como error, ya que unknowVar esta declarada como objeto
//en las funciones

const parse =(str:string):unknown=>{
  return JSON.parse(str); // evita que la funcion explote debido no darle formato adecuado en este caso en formato JSON.
}

鈥渇oo鈥 es simplemente un t茅rmino com煤nmente utilizado como un marcador temporal en ejemplos de c贸digo, y su significado exacto depende del contexto en el que se utiliza.