LoginSignup
3
2

More than 5 years have passed since last update.

TypeScriptでMap ⇔ Object変換

Posted at

TypeScriptで型を保ちつつMapとオブジェクト(連想配列)を変換するには以下のようにすればよさそうです。

util.ts
import * as _ from "lodash";

function mapToObj<V>(map: Map<number, V>): { [key: number]: V };
function mapToObj<V>(map: Map<string, V>): { [key: string]: V };
function mapToObj<V>(map: Map<any, V>): { [key: string]: V } {
    return _.fromPairs([...map]);
}

function objToMap<V>(obj: { [key: number]: V }): Map<number, V>;
function objToMap<V>(obj: { [key: string]: V }): Map<string, V>;
function objToMap<V>(obj: { [key: string]: V }): Map<any, V> {
    return new Map(Object.entries(obj));
}

または

util.ts
import * as _ from "lodash";

function mapToObj<V>(map: Map<number, V>): _.NumericDictionary<V>;
function mapToObj<V>(map: Map<string, V>): _.Dictionary<V>;
function mapToObj<V>(map: Map<any, V>): _.Dictionary<V> {
    return _.fromPairs([...map]);
}

function objToMap<V>(obj: _.NumericDictionary<V>): Map<number, V>;
function objToMap<V>(obj: _.Dictionary<V>): Map<string, V>;
function objToMap<V>(obj: _.Dictionary<V>): Map<any, V> {
    return new Map(Object.entries(obj));
}

_.NumericDictionary<V>_.Dictionary<V>はそれぞれ
{ [key: number]: V }{ [key: string]: V }なので同じです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2