🔥

TypeScriptのスプレッド演算子で上書き

2022/01/22に公開

オブジェクトをDeep Copyしたい

似たようなオブジェクトを別に作りたいことありますよね?

typescript
const obj = {name: "Satoshi", age: 40, birthday: "1981-06-12"};

このオブジェクトと同じで、年齢を変えたいオブジェクトを使ってテストしたいとします。
その時は、スプレッド演算子でオブジェクトを作りましょう。

スプレッド演算子とは

配列やオブジェクトを展開するのがスプレッド演算子の役割です。

typescript
const obj = {name: "Satoshi", age: 40, birthday: "1981-06-12"};
console.log({obj});
console.log({...obj});

だと、

{ obj: { name: 'Satoshi', age: 40, birthday: '1981-06-12' } }
{ name: 'Satoshi', age: 40, birthday: '1981-06-12' }

と表示されます。
2番目のものはきちんと展開されます。

一部だけ書き換える

このオブジェクトの年齢だけ書き換えるコードは下記のようになります。

typescript
const copyObj = {
    ...obj,
    age: 30
};
console.log(copyObj);

これで、ageが30で上書きされたオブジェクトができます。

順番に注意

typescript
const notCopyObj = {
    age: 30,
    ...obj
};
console.log(notCopyObj);

これでは上書きされません。
まあ age: 30 を展開された値で上書きされてしまうので、当たり前ですね。
展開した後に値を上書きするので、前者で書くようにしましょう。
実際間違えていたコードを見たので書いておきます。

スプレッド演算子を活用しましょう!!

Discussion