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