Esto podría haberse preguntado antes, pero tengo una situación en la que tengo un tipo de objeto que mi backend espera así:
type TagTypeThatMyBackendWants = { id: string; name: string; }Consiste en dos claves de tipo cadena, los nombres de las claves son id y nombre. Obtengo este tipo de objetos de etiquetas de mi backend y mi backend también espera que me devuelvan objetos como estos. Ahora, el problema es que estoy usando una biblioteca que maneja estas etiquetas, pero la biblioteca espera que los objetos se vean así:
type TagTypeThatALibraryWants = { id: string; text: string; }Entonces, es básicamente el mismo objeto, pero en lugar de una clave de nombre con un tipo de cadena, la biblioteca espera una clave de texto con un tipo de cadena. Ya resolví esto haciendo un mapeo personalizado de ida y vuelta, pero esto planteó la pregunta de si hay una forma "oficial" o recomendada de hacer algo como esto, como pasar de un tipo de objeto a otro, con la capacidad de dígale a TypeScript que la clave de nombre "se asigna" a la clave de texto y viceversa.
No lo pienses demasiado:
function backendToLibrary(input: TagTypeThatMyBackendWants): TagTypeThatALibraryWants { return { id: input.id, text: input.name } }Es tentador mirar un problema como este, especialmente si necesitas hacerlo muchas veces y pensar: quizás hay una abstracción aquí.
Pero, en última instancia, sabe cómo se asignan las propiedades, por lo que si usara/escribiera una utilidad de asignación genérica, aún necesitaría configurar esta utilidad para cada caso específico, lo que en última instancia resultaría en algo que es más complejo que si literalmente solo lo escribiera para cada caso.
A menos que me falte un caso de uso, no creo que haya ningún beneficio en hacer algo más complicado.