Tengo una variable que tiene tipo de número o cadena. ¿Cómo puedo asignar su valor a una variable que solo acepta números?
const id:Record<string, string|number> = {name:3} let num: Record<string, number>; num = id; //Shows error here Sé que puede haber soluciones alternativas de JavaScript como escribir una función de conversión, pero estoy aprendiendo Typescript y quiero saber si hay keywords o soluciones específicas de TypeScript que están destinadas a usarse en tales casos, as Record<string,number> . .. que puede lanzarlo, en lugar de escribir aserción
Aquí hay un enlace al código en el patio de juegos de TypeScript
Parece que ya respondiste tu pregunta, puedes transmitir con la palabra clave as.
num = id as numberSi quisiera ser elegante, podría verificar el tipo de identificación con typeof, así que algo como esto
if (typeof id === 'number') { number = id }Puede usar las funciones de aserción de TypeScript 3.7 para hacer cumplir las comprobaciones en el código que no eliminó el tipo incorrecto:
const id:Record<string, string|number> = {name:"3"} let num: Record<string,string>; //the code logic safely leads to this line only if "id" contains a number value declare function isNumId(id: Record<string, string | number>): asserts id is Record<string, string>; isNumId(id); num = id; // No longer shows error herePor supuesto, podría ser más sencillo simplemente decirle a TS que estamos seguros del tipo:
num = id as Record<string, string>; // No longer shows error hereEl enlace del patio de juegos de TypeScript es un poco diferente de lo que está en la pregunta:
const id:Record<string, string|number> = {name:"3"} let num: Record<string,string>; //the code logic safely leads to this line only if "id" contains a number value num = id; //shows error herePero de todos modos, hay dos formas rápidas de lidiar con eso:
//One solution: const id2:Record<string, string> | Record<string,number> = {name:"3"} let num2: Record<string,string>; num2 = id2; //Antoher solution: const id3:Record<string, string|number> = {name:"3"} let num3: Record<string,string>; num3 = id as Record<string,string>;