Búsqueda de sitios web

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

Artículos relacionados