enum Color { Red, Green, Blue }
let c: Color = Color.Green; // 1
编译之后为:
var Color;
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));
let c = Color.Green;
此时Color为:
{
0: Red,
1: Green,
2: Blue,
Red: 0,
Green: 1,
Blur: 2
}
因此 Color.Green = 1;
默认情况下,从0开始为元素编号,但是可以手动指定成员的数值:
enum Color { Red = 1,Green = 2,Blue = 4}
此时 Color 为:
{
1: Red,
2: Green,
4: Blue,
Red: 1,
Green: 2,
Blue: 4
}
枚举的便利在于可以由枚举的值得到它的名字:
enum Color { Red=1,Green,Blue };
let colorName: string = Color[2]; // 'Green';
(3): Any 与 Object 的区别
Object类型的变量允许你给它赋任意值,但是却不能调用它上面任意的方法,即使它真的有这些方法:
let notSure: any = 4;
notSure.ifExist();
let prettySure: Object = 4.1;
prettySure.toFixed(); // error
prettySure.toString(); // true
(4): void
当函数没有返回值时,
function warnUser(): void {
console.log('warn')
}
void类型没有什么大用,只能赋予 undefined 或者 null
let unusable: void = undefined;
let unusable: void = null;
(5): never
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message)
}
// 推断的返回值类型为never
function fail() {
return error('somgthing failed')
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}
}