TypeScript:有没有一种方法可以使用枚举以编程方式构造接口

时间:2020-08-23 23:14:16

标签: javascript typescript

所以我有一个enum定义为

enum EventType {
  JOB,
  JOB_EXECUTION,
  JOB_GROUP
}

我需要创建一个这样的界面

interface EventConfigurations {
  JOB: {
    Enabled?: boolean;
  };

  JOB_EXECUTION: {
    Enabled?: boolean;
  };

  JOB_GROUP: {
    Enabled?: boolean;
  };
}

鉴于它们之间存在一对一的映射关系,我想知道是否存在一种基于interface生成此enum的方法吗?目前,我只是对其进行了硬编码

1 个答案:

答案 0 :(得分:4)

您可以像这样将其创建为一种类型(而不是接口):

type EventConfigurations = Record<keyof typeof EventType, { Enabled?: boolean }>

说明:

  • typeof上使用enum给出了一种类型,其每个字符串成员均作为键,而数字则作为值。
  • 在该类型上使用keyof可以得到包含每个键的联合类型。
  • Record<K, V>是从类型K到类型V的映射。

Playground