その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

TypeScriptのMap<K, V>をJSON.stringify()に食わせると空のオブジェクトになって困るんですけどって時

(TypeScriptに限らずJavaScriptでもだいたいこのような感じだと思いますが)

例えば以下のようなコードを書くと,出力としては {"body":{}} が得られます.

const body = new Map<string, string>().set("foo", "bar");
console.log(JSON.stringify({body}));

本当は {"body": {"foo": "bar"}} のような構造がほしいところにこれでは困るわけですね.

そこでどうするかと言うと Object.fromEntries() を利用すると良い:

developer.mozilla.org

const body = new Map<string, string>().set("foo", "bar");
console.log(JSON.stringify({body: Object.fromEntries(body)}));

このようにするとめでたく {"body": {"foo": "bar"}} という構造が得られる.ヤッター!!

これはid:sugyanさんに教えていただきました.ありがとうございます!

なお注意点としては以下のとおりです

  • node 12以降のバージョンが必要
  • tsconfigのlibの指定に es2019 を指定する必要あり

以上です.助かりましたね.


以下はやり取りのおまけです.