从两个对象创建一个对象,并将它们的 属性 名称设置为其类型定义中的值
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}}
我在 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}}