eoao
@eoao

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

プロパティ名が異なる2つのオブジェクト間でデータを代入したい

解決したいこと

それぞれ定義されているプロパティがことなる2つのオブジェクトのデータを
片方に代入?データを入れる?良い方法を教えていただきたいです。

// プロパティ名は異なるが、構造は同じ
interface Test1 {
  hoge: string,
  fuga: string[],
  piyo: { piyopiyo1: string, piyopiyo2: string }
}
interface Test2 {
  foo: string,
  bar: string[],
  baz: { baz1: string, baz2: string }
}

// hogeにfooの値をいれたい

自分で試したこと

片方の型の変数を用意して、データが入っている方を一つ一ついれていくしか思い付きませんでした。
これしか方法はないのでしょうか?
仮にTest1とTest2が配列になっていた場合はループさせるしかないのでしょうか?

0

1Answer

ループ時はfor(let x of y)で配列番号を反復取得できるので、インデックスを指定してプロパティを呼び出す方法が簡易です
最もデータ構造が同一であれば型を一つに統一するか、片方の型のインスタンスをもう片方でプロパティに保持しておくことが推奨されます

0Like

Comments

  1. @eoao

    Questioner

    ありがとうございます。
    本来はおっしゃられている通り、同じものを使う方が良いと思います。
    今回はapiからの戻り値をそのままではなく一度こちら側で定義した型にいれないといけないのですが、それのプロパティ名が異なっているためどうすれば良いのか悩んでいました。

    片方の型のインスタンスをもう片方でプロパティに保持しておくことが推奨されます

    こちらですが、どのようなことかわかりませんでした。
    例えばTest2にTest1の型のプロパティを一つ追加してそこに持てるようにするということでしょうか?
    教えていただきたいです。

  2. その通り、Test1Test2のインスタンスを参照するなどしておくことです

    interface Test1{
     test2:Test2
    }
    

    一度こちら側で定義した型にいれないといけない

    これが目的であれば、インスタンス全体を複製するなどの用途があると思われるので、Test2をラップしておくことでそのような操作が可能です

    const test2:Test2={…}
    
    const test1:Test1={
     test2:{…test2} //複製
    }
    

Your answer might help someone💌