创建一个带有枚举参数的类型

时间:2018-12-17 17:23:47

标签: typescript generics enums type-constraints

我正在尝试使用Record类型创建可重用类型。

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

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

type Case<T> = Record<T, MyValues>;

理想情况下,我可以使用Case<MyKeys>代替Record<MyKeys, MyValues>

  

类型'T'不满足约束'string |编号符号”。

     

类型'T'不能分配给类型'symbol'

2 个答案:

答案 0 :(得分:3)

类型参数T必须限制为有效的索引类型:

type Case<T extends string> = Record<T, MyValues>;

答案 1 :(得分:0)

唯一可用于键的有效类型是字符串,数字和符号。 TypeScript为称为PropertyKey的联合提供了内置别名。

内置Record类型将仅接受其中一种。这就是为什么您的类型构造函数也需要具有相同的约束。

type Case<T extends PropertyKey> = Record<T, MyValues>;