Да, вы можете использовать значения перечисления в качестве ключей. И вы можете использовать сопоставленный тип , такой как стандартная библиотека Record<K, V>
для предотвращения повторения:
enum FooKeys {
FOO = 'foo',
BAR = 'bar',
}
// probably all you need, but it's a type alias
type FooType = Record<FooKeys, string>;
// if you need an interface instead you can do this
interface FooInterface extends FooType {};
И вы можете убедиться, что это работает:
declare const foo: FooInterface;
foo.foo; // okay
foo[FooKeys.FOO]; // okay
foo.bar; // okay
foo[FooKeys.BAR]; // okay
foo.baz; // error
Это работает для вас? Удачи!