Как сделать динамический ключ объекта по значениям другого объекта?

Доброго дня.
Есть объект, который представляет собой карту алиасов и возможных значений.
const TYPES = {
   TYPE: 'type',
   ANOTHER_TYPE: 'anotherType',
}

Нужно описать объект, который может хранить в себе функции по ключам, являющим собою значения объекта TYPES. То есть, выглядит этот объект так:
const object = {
   type: () => {},
   anotherType: () => {},
}

В данном случае задача осложняется тем, что keyof вернет объединение ключей, а valueof, к сожалению, в TS не завезли. Завести второй объект (Object.values(TYPES)) такой себе вариант, потому что в этом случае keyof замусорит возможные ключи различными length и прочими встроенными в прототип Array свойствами и методами.

Как решить задачу наиболее элегантно?
  • Вопрос задан
  • 1538 просмотров
Решения вопроса 1
@StockholmSyndrome
interface Types {
  TYPE: 'type';
  ANOTHER_TYPE: 'anotherType';
}

type SomeType = {
  [P in Types[keyof Types]]: () => void;
};

const object: SomeType = {
  type: () => {}, 
  anotherType: () => {}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы