В процессе миграции древней кодовой базы CoffeeScript на TypeScript я также попытка отказаться от lodash / underscore.js-alikes в пользу современных функций стандартной библиотеки JavaScript (или их прокладок).
Одна вещь, которую я часто использую в моей кодовой базе, — это map()
над Object
вместо того Array
. В lodash это это.
Ниже приводится общая версия, которую я мог бы сделать:
export type Entry<T> = [string, T]
export type EntriesMapper<T, U> = (
entry: Entry<T>,
index: number,
object: Record<string, T>,
) => Entry<U>
// FIXME: Support `Symbol`-keyed objects. Unfortunately, TypeScript themselves seem to have
// sidestepped this issue; so I'm not sure what I can do, myself:
// <https://git.io/JuGVg>
export function ObjectMap<T, U>(
object: Record<string, T>,
mapper: EntriesMapper<T, U>,
): { [k: string]: U } {
const entries = Object.entries(object)
const result = entries.map((entry: Entry<T>, index: number) => {
return mapper(entry, index, object)
})
const return_value = Object.fromEntries(result)
return return_value
}