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 }なので同じです。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.