枚举
enum类型是对JavaScript标准数据类型的一个补充。 像C#等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字。
enum Color{Red,Green,Blue}letc:Color=Color.Green;
默认情况下,从0开始为元素编号。 你也可以手动的指定成员的数值。 例如,我们将上面的例子改成从1开始编号:
enum Color{Red=1,Green,Blue}letc:Color=Color.Green;
或者,全部都采用手动赋值:
enum Color{Red=1,Green=2,Blue=4}letc:Color=Color.Green;
枚举类型提供的一个便利是你可以由枚举的值得到它的名字。 例如,我们知道数值为2,但是不确定它映射到Color里的哪个名字,我们可以查找相应的名字:
enumColor{Red=1,Green,Blue}letcolorName:string=Color[2];alert(colorName);// 显示'Green'因为上面代码里它的值是2
任意值
有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用any类型来标记这些变量:
letnotSure:any=4;notSure="maybe a string instead";notSure=false;// okay, definitely a boolean
在对现有代码进行改写的时候,any类型是十分有用的,它允许你在编译时可选择地包含或移除类型检查。 你可能认为Object有相似的作用,就像它在其它语言中那样。 但是Object类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方法,即便它真的有这些方法:
letnotSure:any=4;notSure.ifItExists();// okay, ifItExists might exist at runtimenotSure.toFixed();// okay, toFixed exists (but the compiler doesn't check)letprettySure:Object=4;prettySure.toFixed();// Error: Property 'toFixed' doesn't exist on type 'Object'.
当你只知道一部分数据的类型时,any类型也是有用的。 比如,你有一个数组,它包含了不同的类型的数据:
letlist:any[]=[1,true,"free"];list[1]=100;
空值
某种程度上来说,void类型像是与any类型相反,它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是void:
functionwarnUser():void{alert("This is my warning message");}
声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null:
letunusable:void=undefined;
网友评论