Я тут с болью и унижением осознаю TypeScript, есть вопрос
[{Fuck, Suck, Buck}:Duck, ...] (F,S,B - типы)
Нужна функция, которая превратит это в
[{Buck: {Fuck, Suck, Buck}, ...]
В смысле, вот лежали у нас какие-то элементы в массиве. Готовые, пришедшие откуда-то. Теперь хочется индексировать этот массив, выдрав одно из полей и сделав его ключом в какой-то структуре данных, похожей на Map.
При этом хочется, чтобы компилятор TS проверил типы, и сделать всё это generic-однострочником
Вижу уже готовые определения вида:
type Pick<T, K extends keyof T> = { [P in K]: T[P]; }
type Record<K extends keyof any, T> = { [P in K]: T; }
И их использование в виде:
function mapObject<K extends string, T, U>(obj: Record<K, T>, f: (x: T) => U): Record<K, U>
const names = { foo: "hello", bar: "world", baz: "bye" };
const lengths = mapObject(names, s => s.length);
// { foo: number, bar: number, baz: number }
Но как в таком же стиле решить вопрос с "индексацией" не понимаю.
Пока что курю раздел "Index types" в официальном мануале:
https://www.typescriptlang.org/docs/handbook/advanced-types.html#index-types