仅允许来自枚举的值但不要求枚举中存在每个值的类型

时间:2020-03-12 01:28:35

标签: typescript

我有以下代码:

enum Foo {
  a,
  b,
  c
}

type Bar = {
  [key in keyof typeof Foo]: string;
}

const test: Bar = {
  a: 'a',
  b: 'b'
};

代码抱怨test变量没有c属性。

如何更改Bar类型,以使枚举中的键是可选的?

2 个答案:

答案 0 :(得分:1)

您可以使用Partial<T>

enum Foo {
  a,
  b,
  c
}

type Bar = Partial<{
  [key in keyof typeof Foo]: string;
}>

const test: Bar = {
  a: 'a',
  b: 'b'
};

或者,如@jcalz的评论中所述,将属性标记为optional

enum Foo {
  a,
  b,
  c
}

type Bar = {
  [key in keyof typeof Foo]?: string;
}

const test: Bar = {
  a: 'a',
  b: 'b'
};

答案 1 :(得分:0)

实用程序类型PartialRecord的最简单解决方案

type Bar = Partial<Record<keyof typeof Foo, string>>