Самое простое решение - использовать Record
type OptionRequirements = Record<Options, OptionRequirement>
Вы также можете реализовать его самостоятельно как:
type OptionRequirements = {
[key in Options]: OptionRequirement;
}
Эта конструкция доступна только для type
, но неinterface
.
Проблема в вашем определении заключается в том, что ключ вашего интерфейса должен иметь тип Options
, где Options
- это перечисление, а не строка, число или символ.
key in Options
означает "для тех конкретных ключей, которые входят в параметры типа объединения".
type
псевдоним более гибкий и мощный, чем interface
.
Если ваш типне нужно использовать в классе, выберите type
вместо interface
.