Signal-Desktop/ts/util/makeLookup.ts

18 lines
603 B
TypeScript
Raw Normal View History

2021-03-11 21:29:31 +00:00
// Copyright 2019-2021 Signal Messenger, LLC
2020-10-30 20:34:04 +00:00
// SPDX-License-Identifier: AGPL-3.0-only
2019-01-14 21:49:58 +00:00
export function makeLookup<T>(
2021-03-11 21:29:31 +00:00
items: ReadonlyArray<T>,
key: keyof T
): Record<string, T> {
return (items || []).reduce((lookup, item) => {
2021-01-27 22:39:45 +00:00
if (item !== undefined && item[key] !== undefined) {
// The force cast is necessary if we want the keyof T above, and the flexibility
// to pass anything in. And of course we're modifying a parameter!
// eslint-disable-next-line no-param-reassign
lookup[String(item[key])] = item;
}
return lookup;
}, {} as Record<string, T>);
2019-01-14 21:49:58 +00:00
}