我正在尝试为给定的枚举创建一个保证查找。也就是说,对于枚举的每个键,查找中应该恰好有一个值。我希望通过类型系统来保证这一点,这样如果枚举扩展了,我就不会忘记更新查找。我尝试了以下方法:
type EnumDictionary<T, U> = {
[K in keyof T]: U;
};
enum Direction {
Up,
Down,
}
const lookup: EnumDictionary<Direction, number> = {
[Direction.Up]: 1,
[Direction.Down]: -1,
};
但是我遇到了一个奇怪的错误:
类型 '{ [Direction.Up]: number; [Direction.Down]: number; }' 不能赋值给类型 'Direction'。
我觉得这很奇怪,因为它说 lookup
的类型应该是 Direction
而不是 EnumDictionary<Direction, number>
。我可以通过将 lookup
的声明更改为以下内容来确认此问题:
const lookup: EnumDictionary<Direction, number> = Direction.Up;
没有报错。
我如何为枚举创建一个查找类型,以确保枚举的每个值都将导致另一种不同类型的值?
TypeScript 版本:3.2.1