Интерфейс не может представлять это ограничение без обобщений.
В этом случае ваши возможные S
типы перечислимы , поэтому вы можете сформировать union из SezViewSettings<S>
для всех возможных значений S
и использоватьэто как твой тип. Этого может быть достаточно для ваших нужд.
Вот один из способов сделать это, сделав сопоставленный тип , свойства которого сразу ищутся :
type SezViewSettingUnion = { [S in Section]: SezViewSettings<S> }[Section]
/* type SezViewSettingUnion = SezViewSettings<Section.users> |
SezViewSettings<Section.projects>
*/
Аналогично, вы можете использовать условно-распределительные типы :
type _SezViewSettingUnion<S extends Section> =
S extends any ? SezViewSettings<S> : never;
type SezViewSettingUnion = _SezViewSettingUnion<Section>;
/* type SezViewSettingUnion = SezViewSettings<Section.users> |
SezViewSettings<Section.projects> */
Оба они в конечном итоге производят один и тот же тип, эквивалентный SezViewSettings<Section.users> | SezViewSettings<Section.projects>
.
Хорошо, надеюсь, это поможет;удачи!
Ссылка на код