How to build a type from enum values in TypeScript?

后端 未结 3 1618
时光取名叫无心
时光取名叫无心 2021-01-17 10:53

Given the following:

enum FooKeys {
  FOO = \'foo\',
  BAR = \'bar\',
}

I\'d like to make an interface like this one, but instead of defini

3条回答
  •  青春惊慌失措
    2021-01-17 11:28

    Yes, you can use enum values as keys. And you can use a mapped type like the standard library's Record to prevent repetition:

    enum FooKeys {
      FOO = 'foo',
      BAR = 'bar',
    }
    
    // probably all you need, but it's a type alias
    type FooType = Record;
    
    // if you need an interface instead you can do this
    interface FooInterface extends FooType {};
    

    And you can verify that it works:

    declare const foo: FooInterface;
    foo.foo; // okay
    foo[FooKeys.FOO]; // okay
    
    foo.bar; // okay
    foo[FooKeys.BAR]; // okay
    
    foo.baz; // error
    

    Does that work for you? Good luck!

提交回复
热议问题