从两个对象创建一个对象,并将它们的 属性 名称设置为其类型定义中的值

Create an object from two objects and set their property names as a value from their type definitions

我在 class 中有一个对象合并,目前的工作方式如下:

public merge(): TOne & TTwo {
    return { ...this.objectOne, ...this.objectTwo };
}

我试图将它们分开,因为某些属性可能具有相同的名称...我的第一个想法是创建 2 个变量,其名称将由 class 属性:

public merge(): { [this.objectOne.key]: TOne, [this.objectTwo.key]: TTwo } {
    return { [this.objectOne.key]: { ...this.objectOne }, [this.objectTwo.key]: { ...this.objectTwo } };
}

但这不适用于泛型类型并显示此错误:

A computed property name in a type literal must refer to an expression whose type is a literal type or a 'unique symbol'

如何将它们与自定义 属性 名称合并?或者任何解决方法?或者有什么建议?

PS.: 我刚刚问了 问题,然后我意识到这对解决实际问题没有帮助。

您可以使用 [key: number]: A | B。对象的任何一个键都应该是一个数字,或者你可以指定任何类型,这个键的值是A或B。

我找不到任何方法来像您尝试做的那样制作动态密钥。

例如:

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}}