我想知道最好的方法,比如我有两个对象
var objectA = {
propertyA: 1,
propertyB: 2
...
propertyM: 13
}
var objectB = {
propertyN: 14,
propertyO: 15
...
propertyZ: 26
}
如果objectC是由
创建的var objectC = Object.assign(objectA, objectB);
如何声明/描述objectC,以便编译器/ IDE知道它具有objectA和objectB的属性?
我想找到一种方法,而不需要为objectA和objectB定义接口。我不想两次为同一财产编写声明和定义/评估。如果我在对象上有太多属性,则此冗余非常重要。
(是否有可以提取现有对象的接口/类型的运算符?)
有可能吗?
答案 0 :(得分:7)
所以编译器/ IDE知道它具有objectA和objectB的属性?
使用交集类型+泛型。例如。 from here
/**
* Quick and dirty shallow extend
*/
export function extend<A>(a: A): A;
export function extend<A, B>(a: A, b: B): A & B;
export function extend<A, B, C>(a: A, b: B, c: C): A & B & C;
export function extend<A, B, C, D>(a: A, b: B, c: C, d: D): A & B & C & D;
export function extend(...args: any[]): any {
const newObj = {};
for (const obj of args) {
for (const key in obj) {
//copy all the fields
newObj[key] = obj[key];
}
}
return newObj;
};
这里提到了两个:https://basarat.gitbooks.io/typescript/content/docs/types/type-system.html
答案 1 :(得分:4)
使用Typescript spread operator将其转换为Javascript Object.assign()
如果您需要深层树对象合并,则可以使用best-global包
的更改功能答案 2 :(得分:3)
尝试一下。
const person = { name: 'TRilok', gender: 'Male' };
const tools = { computer: 'Mac', editor: 'Atom' };
const attributes = { handsomeness: 'Extreme', hair: 'Brown', eyes: 'Blue' };
const summary = {...person, ...tools, ...attributes};
答案 3 :(得分:1)
(是否存在可以提取接口/类型的运算符 现有对象?有可能吗?)
你应该去 typeof 。
type typeA = typeof objectA;
type typeB = typeof objectB;
要合并它们,您可以使用交叉操作作为已经指出的basarat。
type typeC = typeA & typeB