javascript - 在 typescript 中使用枚举内部的枚举?

标签 javascript typescript enums

enum KINDS {
  STATIC = 1,
  FIELD,
  ARG,
  VAR
}

enum ALL_KINDS {
  STATIC = 1,
  FIELD,
  ARG,
  VAR,
  NONE
}

如何在第二个枚举中重用第一个枚举?

最佳答案

据我所知,扩展枚举是 under consideration ,与此同时,您可以改用 const 对象:

const KINDS = <const>{
  STATIC: 1,
  FIELD: 2,
  ARG: 3,
  VAR: 4
};

const ALL_KINDS = <const>{ ...KINDS, NONE: 5 };

上述线程中还有其他解决方法。

如果要检查此类型,请注意,从类型的 Angular 来看,数字 enum 等同于 number:

enum KINDS {
  STATIC,
  FIELD,
  ARG,
  VAR
}

declare function func(name: string, type: string, kind: KINDS): any;

func('foo', 'bar', KINDS.ARG); // compiles
func('foo', 'bar', 99); // compiles too (?)

如果您使用上面建议的对象,您还可以通过为该对象的所有可能值创建一个类型来强制执行严格的类型检查:

const KINDS = <const>{
  STATIC: 1,
  FIELD: 2,
  ARG: 3,
  VAR: 4
};

type KIND_VALUE = typeof KINDS[keyof typeof KINDS]

declare function define(name: string, type: string, kind: KIND_VALUE): any;

define('foo', 'bar', KINDS.ARG); // compiles
define('foo', 'bar', 99); // doesn't compile

这有点冗长,但是你确实检查了你的类型。

关于javascript - 在 typescript 中使用枚举内部的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58158357/

相关文章:

javascript - Suitescript 计划脚本错误 : SSS_MISSING_REQD_ARGUMENT Details: id

javascript - 在 Javascript 中使用正则表达式格式化电话号码

javascript - 然后服务 worker 注册 - 未定义不是一个函数

javascript - Angular2 解析 Promise 时出错 : Type 'Promise<Hero[]>' is no t assignable to type 'Hero[]'

wcf - 底层连接已关闭 : The connection was closed unexpectedly

Javascript 和 Regex 删除文本

typescript - 在 VS Code 中调试不适用于 Typescript Vue 应用程序

angular - 当用户单击 mat-calendar 中的月份导航时,如何检索月份和年份值?

c++ - 匿名枚举的使用

vb.net - 将泛型类型对象传递给受约束的泛型方法 vb.net