Рассмотрим функцию:
const f = k => v => array =>
array.reduce(
(total, current) => ({
...total,
[current[k]]: current[v]
}),
{}
);
Эта функция принимает ключ k
, значение v
, а затем массив объектов в качестве входных данных и возвращает объект, подобный карте, где ключи и значения являютсяберется из значений ключа k
и значения v
.Например,
const k = 'key';
const v = 'value';
const input = [{ key: 1, value: 100 }, { key: 2, value: 200 }, { key: 3, value: 300 }];
f(k)(v)(input); // -> { '1': 100, '2': 200, '3': 300 }
Я пытаюсь объявить тип объектов в массиве.Они должны иметь два свойства, но эти свойства не являются статичными.Тем не менее, они могут быть получены из k
и v
, предшествующих array
.Каждый объект в array
должен иметь форму, подобную
const k = 'key';
const v = 'value';
{ [k]: 123, [v]: 456 }; // -> { 'key': 123, 'value': 456 }
Пока что я нахожусь в этой точке:
const f = <K>(k: K) => <V>(v: V) => (array: Array<{ [k]: K, [v]: V }>) =>
array.reduce(
(total, current) => ({
...total,
[current[k]]: current[v]
}),
{}
);
, что является технически допустимым синтаксисом потока, но дает мне ошибку:
1: const f = <K>(k: K) => <V>(v: V) => (array: Array<{ [k]: K, [v]: V }>) =>
^ Cannot use `K` as a type because `K` is a value. To get the type of a value use `typeof`
Как объявить тип, который является объектом формы, полученным из ранее объявленных универсальных типов?Возможно ли это в Flow?