当前位置: 首页 > 知识库问答 >
问题:

枚举在typescript中的意义是什么

拓拔元徽
2023-03-14

在typescript中枚举的用途是什么。如果它的目的仅仅是使代码可编辑,我们就不能使用常量来达到同样的目的吗

enum Color {
Red = 1, Green = 2, Blue = 4
};


let obj1: Color = Color.Red;
obj1 = 100; // does not show any error in IDE while enum should accept some specific values

如果没有打字检查的好处,就不能写成。

const BasicColor = {
    Red: 1,
    Green: 2,
    Blue: 4
};

let obj2 = BasicColor.Red;

共有1个答案

党俊健
2023-03-14

首先,在以下方面:

const BasicColor = {
    Red: 1,
    Green: 2,
    Blue: 4
};

RedGreenBlue仍然是可变的(而它们不在枚举中)。

枚举还提供了一些功能:

  1. 一组封闭的已知值(以后不允许打字错误),每个值都有...
  2. 为每个成员提供相应的类文字类型集,所有这些都提供了...
  3. 包含所有值的单个命名类型

例如,要使用名称空间之类的东西实现这一点,您必须执行以下操作

export namespace Color
    export const Red = 1
    export type Red = typeof Red;

    export const Green = 2;
    export type Green = 2;

    export const Blue = 3;
    export type Blue = typeof Blue;
}
export type Color = Color.Red | Color.Blue | Color.Green

您还注意到一些不幸的遗留行为,其中TypeScript允许从任何数值赋值到数值枚举。

但是,如果使用字符串枚举,则不会获得该行为。您还可以使用联合枚举启用诸如穷举检查之类的其他功能:

enum E {
  Hello = "hello",
  Beautiful = "beautiful",
  World = "world"
}

// if a type has not been exhaustively tested,
// TypeScript will issue an error when passing
// that value into this function
function assertNever(x: never) {
  throw new Error("Unexpected value " + x);
}

declare var x: E;
switch (x) {
  case E.Hello:
  case E.Beautiful:
  case E.World:
    // do stuff...
    break;
  default: assertNever(x);
}
 类似资料:
  • 本节介绍枚举类型的定义及其使用,需要定义一组相同主题的常量数据时,应该立即想到枚举类型。在学习过程中,需要注意枚举类型的正向映射和反向映射,可以通过编译后的 JavaScript 源码进行分析,为什么可以进行反向映射。 1. 慕课解释 使用枚举我们可以定义一些带名字的常量。TypeScript 支持数字的和基于字符串的枚举。 2. 定义及使用场景 枚举类型弥补了 JavaScript 的设计不足,

  • 问题内容: 在JavaScript中定义枚举的首选语法是什么?就像是: 还是有更好的成语? 问题答案: 从1.8.5开始,可以密封和冻结对象,因此将以上定义为: 要么 和瞧!JS枚举。 但是,这不会阻止您为变量分配不需要的值,这通常是枚举的主要目标: 确保类型安全性(使用枚举或其他方式)的程度更高的一种方法是使用诸如TypeScript或Flow之类的工具。 不需要引号,但为了保持一致性,我保留了

  • 想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。 当你说枚举在java中是常量时,你实际上是什么意思? 它们是什么类型的常量(整数常量、字符常量、字符串常量)? 当我使用枚举作为切换用例值时,为什么Java系统没有抱怨? 据我所知,在1.7之前,switch语句接受byte、short、int或char作为大小写值。所以,当有人说枚举是常量,并且可以在开关情况下使用时,他们指的是什么类型

  • 因此,进一步寻找,我发现这个人有一个解决方案:typescript中基于字符串的枚举的解决方案 这将允许像这样的东西工作: 唯一的回应基本上是说这样做是不安全的。(但我应该说,它确实起作用了--我可以键入eventtype.dot...Atom editor给了我5个大小写选项可供选择(保持代码中的内容一致),然后我可以使用它将字符串值吐出来,给我的用户一个很好的填充空间的体验,将来我可以更改枚举