Typescript: ¿no se puede convertir a un tipo genérico "Record<string, string>"?
¿Por qué TypeScript no me permite convertir lo siguiente:
interface foo {
foofoo: string
feefee: string
faafaa: 'red' | 'blue'
}
¿en Record<string, string>? ¿Cómo puedo hacer que eso suceda?
He intentado:
- cambiando los literales de cadena red|blue a solo el tipo
string - intentó
instanceOfFoo como Record<string, string> - intenté cambiarlo a un tipo en lugar de una interfaz
...ninguna alegría en absoluto, se agradece cualquier ayuda
Respuesta #1
TypeScript señala un error aquí no porque los dos tipos no sean asignables entre sí, sino porque no tienen propiedades en común, esto casi siempre se hace por error, y la instrucción en el error es bastante clara sobre qué hacer en caso de que no sea así.
La conversión del tipo 'foo' al tipo 'Record' puede ser un error porque ninguno de los dos tipos se superpone lo suficientemente con el otro. Si esto fue intencional, convierte primero la expresión a 'unknown'.
Énfasis mío.
Entonces lo que necesitas hacer es algo como
declare const x: foo; // there exists a variable x of type foo.
const y = x as unknown as Record<string, string>; // cast to unknown, then to Record.
Enlace del parque
