Tengo una fusión de objetos dentro de una clase que actualmente funciona así:
public merge(): TOne & TTwo { return { ...this.objectOne, ...this.objectTwo }; }
Estoy tratando de separarlos porque algunas propiedades pueden tener el mismo nombre... Mi primera idea fue crear 2 variables cuyos nombres estarían definidos por una propiedad de clase:
public merge(): { [this.objectOne.key]: TOne, [this.objectTwo.key]: TTwo } { return { [this.objectOne.key]: { ...this.objectOne }, [this.objectTwo.key]: { ...this.objectTwo } }; }
Pero eso no funciona con tipos genéricos y muestra este error:
Un nombre de propiedad calculado en un tipo literal debe hacer referencia a una expresión cuyo tipo es un tipo literal o un 'símbolo único'
¿Cómo puedo fusionarlos con un nombre de propiedad personalizado? ¿O alguna solución? ¿O alguna sugerencia?
PD: Acabo de hacer esta pregunta y luego me di cuenta de que no sería útil para resolver el problema real.
Puede utilizar [key: number]: A | B
Cualquier clave del objeto debe ser un número o puede especificar cualquier tipo y el valor de esta clave es A o B.
No pude encontrar ninguna forma de hacer claves dinámicas como intentas hacer.
por ejemplo :
type A = { key: number; name: string; age: number; }; type B = { key: number; adress: string; phone: number; }; const obj1: A = { key: 1, name: "John", age: 30 }; const obj2: B = { key: 2, adress: "London", phone: 12345 }; const merge = (obj1: A, obj2: B): { [key: string]: A | B } => { return { [obj1.key]: obj1, [obj2.key]: obj2 }; }; merge(obj1,obj2); // {1: {key: 1, name: "John", age: 30}, 2: {key: 2, adress: "London", phone: 12345}}