在打字稿中的接口中将枚举值用作类型

时间:2020-08-20 00:37:17

标签: typescript enums interface

接口中是否有效使用了枚举?

declare enum MyEnumType {
   Member1,
   Member2,
}
interface Foo {
  prop1: MyEnumType,          // this is valid
  prop2: MyEnumType.Member1   // how about this? If not, why?
}

1 个答案:

答案 0 :(得分:1)

如果在沙箱中运行此代码,则会收到错误消息:

Enum type 'MyEnumType' has members with initializers that are not literals.

仅当您declare枚举时,它才是无效的。在这种情况下,您告诉TS枚举存在,但是您不告诉它值是什么,因为这个枚举的定义可能是这样的:

enum MyEnumType {
  Member1 = 8,
  Member2 = 'RaNdOmWhAtEvEr'
}

这意味着MyEnumType.Member2不明确。如果您

  1. 显式定义枚举(删除declare关键字)。现在,TypeScript可以完全控制枚举,并且知道它将为其键分配值01
  2. 明确告诉声明的枚举的键是什么
declare enum MyEnumType {
  Member1 = 0,
  Member2 = 1
}

现在,TS知道枚举的含义,并且能够使用其键作为类型进行操作。