【问题标题】:Custom Key / Value type from enum and interface来自枚举和接口的自定义键/值类型
【发布时间】:2018-12-18 01:15:37
【问题描述】:

我正在寻找一种自定义类型,它允许我使用来自枚举的键创建一个对象,并且所有这些都与来自特定接口的值匹配。有没有一种简单的方法来创建下面的Custom 类型?

enum MyKeys {
  ALPHA = 'ALPHA',
  BETA = 'BETA',
  GAMMA = 'GAMMA',
}

interface MyValues {
  in: any[];
  out: any[];
}

type Example = Custom<MyKeys, MyValues>

应该对以下有效:

{
  [MyKeys.ALPHA]: {
    in: []
    out: []
  },
  [MyKeys.BETA]: {
    in: []
    out: []
  },
  [MyKeys.GAMMA]: {
    in: []
    out: []
  }
}

【问题讨论】:

  • Record&lt;MyKeys, MyValues&gt; ?
  • @jcalz 就是这样,如果你回答我会批准。
  • Mapping Enum to Type的可能重复

标签: typescript


【解决方案1】:

您只是在寻找来自the standard libraryRecord&lt;K, V&gt; 类型。这是一个mapped type,其中值类型不依赖于键。在 TypeScript 2.6 中使用基于字符串的枚举作为键类型的能力是 added

让我们看看它的实际效果:

type Example = Record<MyKeys, MyValues>
const ex: Example = {
  [MyKeys.ALPHA]: {
    in: [],
    out: []
  },
  [MyKeys.BETA]: {
    in: [],
    out: []
  },
  [MyKeys.GAMMA]: {
    in: [],
    out: []
  }
}; // works

看起来不错。希望有帮助;祝你好运。

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 2011-09-11
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多