打字稿中枚举的用法是什么。如果它的目的只是为了使代码可以重做,那么我们就不能只使用常量来实现同样的目的
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;
答案 0 :(得分:4)
首先,在下面:
const BasicColor = {
Red: 1,
Green: 2,
Blue: 4
};
Red
,Green
和Blue
仍然是可变的(而它们不在枚举中)。
枚举也提供了一些东西:
例如,要使用类似命名空间的东西,你必须做类似
的事情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);
}