これを行う最良の方法を知りたいのですが、2つのオブジェクトがあるとします
var objectA = {
propertyA: 1,
propertyB: 2
...
propertyM: 13
}
var objectB = {
propertyN: 14,
propertyO: 15
...
propertyZ: 26
}
objectCが
var objectC = Object.assign(objectA, objectB);
コンパイラ/IDE が objectC が objectA と objectB の両方のプロパティを持っていることを認識できるように、objectC を宣言/記述するにはどうすればよいですか?
objectA と objectB のインターフェースを定義する必要がない方法を見つけたいです。同じプロパティの宣言と定義/評価を 2 回記述したくありません。オブジェクトにプロパティが多すぎる場合、この冗長性は重要です。
(既存のオブジェクトのインターフェース/型を抽出できる演算子はありますか?)
出来ますか?
ベストアンサー1
どうやらこれでうまくいくようです:
var objectA = {
propertyA: 1,
propertyB: 2,
.
. // more properties here
.
propertyM: 13
};
var objectB = {
propertyN: 14,
propertyO: 15,
.
. // more properties here
.
propertyZ: 26
};
var objectC = {...objectA, ...objectB}; // this is the answer
var a = objectC.propertyA;
var n = objectC.propertyN;
この記事に基づいて:https://blog.mariusschulz.com/2016/12/23/typescript-2-1-object-rest-and-spread
さらに、分解における変数の順序も重要です。次の点を考慮してください。
var objectA = {
propertyA: 1,
propertyB: 2, // same property exists in objectB
propertyC: 3
};
var objectB = {
propertyX: 'a',
propertyB: 'b', // same property exists in objectA
propertyZ: 'c'
};
// objectB will override existing properties, with the same name,
// from the decomposition of objectA
var objectC = {...objectA, ...objectB};
// result: 'b'
console.log(objectC.propertyB);
// objectA will override existing properties, with the same name,
// from the decomposition of objectB
var objectD = {...objectB, ...objectA};
// result: '2'
console.log(objectD.propertyB);