📚

オブジェクトを分割代入する際に、変数名を変更する

2024/09/03に公開

一見すると妙に感じたことがあるので投稿です。

以下の session について、session は(TypeScriptの)型情報だからif文の中に書けるのか?という疑問がありました。

import { useSession } from "next-auth/react";

const XXX: React.FC<Props> = (props) => {
  const { data: session } = useSession()
  if (!session) {
    /* 処理 */
  }
}

ですがこの認識は誤りであり、実際はJavaScriptにおける分割代入の仕様であることが分かりました。
mdn web docsのこちらの記事に該当します。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#バインドと代入

つまり、例えば以下のように代入することができます。

const a = { b: 1, c: {d: 2 } }

const { b: x } = a;
console.log(x) // 1

const { c: {d: y} } = a;
console.log(y) // 2

const { b: xx, c: {d: yy } } = a
console.log(xx) // 1
console.log(yy) // 2

Discussion