Как использовать тип элемента массива в качестве ключа записи - PullRequest
0 голосов
/ 18 марта 2020

У меня есть функция карри, которая принимает универсальный c тип Entity и поля в качестве аргумента. fields содержит только элементы, которые являются именем свойства Entity. Теперь я хочу, чтобы values был объектом, состоящим из элементов fields.

У меня проблема в том, что тип возвращаемого значения fn - это Entity, а не объект, состоящий только из ключей, включенных в fields

здесь код, который я пробовал:

type PrepareSearch = <Entity extends Record<string, any>>(
  fields: ReadonlyArray<keyof Entity>
) => (values: Record<typeof fields[number], any>) => Record<string, any>;

const prepareSearch: PrepareSearch = fields => values => /* some code.. */

здесь желаемый вывод

interface IEntity {
  id: string;
  name: string;
}

const getEntitySearchCriterions = prepareSearch<IEntity>(["name"])

// Here I want to only allow 'name' as object key, because only 'name' was passed in the array above
const criterions = getEntitySearchCriterions({name: 'some name'})
...