#typescript #typescript-generics
#typescript #typescript-обобщения
Вопрос:
Давайте рассмотрим следующие типы, например, где я хочу иметь возможность определять свой пользовательский объект, где ключ — это имя флага, а значение — тело флагов.
interface FlagModel {
value: boolean;
}
interface GenericFlagsModel<T extends Record<string, FlagModel>> {
flags: T
}
enum FLAG_NAMES {
FLAG_FOO = 'flag-foo',
FLAG_BAR = 'flag-bar'
}
type CustomFlagsModel = GenericFlagsModel<{
[FLAG_NAMES.FLAG_FOO]: FlagModel,
[FLAG_NAMES.FLAG_BAR]: FlagModel
}>
Глядя на CustomFlagsModel
, вы можете видеть, что мне нужно явно определить FlagModel
как значение. Можно ли этого избежать? Например, как:
type CustomFlagsModel = GenericFlagsModel<{
[FLAG_NAMES.FLAG_FOO],
[FLAG_NAMES.FLAG_BAR]
}>
Ответ №1:
Соответствует ли следующее вашим потребностям?
type CustomFlagsModel = GenericFlagsModel<Record<FLAG_NAMES, FlagModel>>
Комментарии:
1. Я обнаружил, что вам не нужно использовать OR для этого. Достаточно перечисления.
Record<FLAG_NAMES, FlagModel>