是否可以在 Typescript 中定义没有显式类型的枚举?

Posted

技术标签:

【中文标题】是否可以在 Typescript 中定义没有显式类型的枚举?【英文标题】:Is it possible to define an enum without an explicit type in Typescript? 【发布时间】:2018-01-21 09:32:14 【问题描述】:

在一个界面中,我有 10 多个(可选)成员,其中大多数成员都有一组确定的可能值,所以我想为它们使用枚举。然而,这需要定义至少 10 个新的枚举类型,只有很少的成员(并且只使用一次),所以我想直接在接口中定义枚举。因此,而不是:

export interface Options 
    option1?: bool | Option1Enum;
    option2?: bool | Option2Enum;
    option3?: bool | Option3Enum;
    option4?: bool | Option4Enum;
    option5?: bool | Option5Enum;

我想要一个隐式枚举,比如:

export interface Options 
    option1?: bool |  option11, option12 ;
    option2?: bool |  option21, option22 ;
    option3?: bool |  option31, option32, option33 ;
    option4?: bool |  option41, option42 ;
    option5?: bool |  option51 ;

无法编译。有没有办法在 Typescript 中做这种枚举声明?

在其他语言中这是可能的,例如在 C++ 中:

  class Options 
  public:
    enum  value1, value2,  enumMember = value1;
  ;

【问题讨论】:

【参考方案1】:

一种可能的解决方案似乎是字符串:

export interface Options 
    option1?: bool | "option11" | "option12";
    option2?: bool | "option21" | "option22";
    option3?: bool | "option31" | "option32" | "option33";
    option4?: bool | "option41" | "option42";
    option5?: bool | "option51";

转译器确保只能分配这些值,这本质上类似于枚举的行为。

【讨论】:

以上是关于是否可以在 Typescript 中定义没有显式类型的枚举?的主要内容,如果未能解决你的问题,请参考以下文章

对Java单例设计模式中懒汉式类定义的讨论

TypeScript 是不是为 NodeJS 模块访问提供显式公共 API?

yield(C# 参考)

scala中隐式转换之隐式类

是否执行了视图列集中的所有函数,即使它们没有在查询中显式引用?

在 TailwindCSS 中将响应式类串在一起