打字稿中枚举的重要性是什么

时间:2018-03-08 08:48:54

标签: 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 个答案:

答案 0 :(得分:4)

首先,在下面:

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

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

枚举也提供了一些东西:

  1. 一组封闭的众所周知的价值观(后来不允许打字错误),每一个都有......
  2. 每个成员的一组类似文字的类型,都提供了......
  3. 由包含所有值的单个命名类型
  4. 例如,要使用类似命名空间的东西,你必须做类似

    的事情
    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允许从任何数值赋值给数字枚举。

    但如果您使用字符串枚举,则无法获得该行为。还有其他一些功能,例如可以使用union枚举启用的详尽检查:

    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);
    }