玩转TypeScript(2) --简单TypeScript类型
通过TypeScript的Module和Class,TypeScript提供了相对于javaScript更加清晰的代码构造,相较于javaScript的.js满天飞的代码,用TypeScript,你可以更加模块化的管理自己的项目(这本来是JavaScript具有的功能,只是TypeScript通过语法结构让定义更加清晰和明了)。TypeScript的重要性还是在于其类型,比如在定义一个变量的时候,可以通过指定一个类型来限制它的作用范围,而javaScript是弱类型的,这也是javaScript开发的代码有些维护困难的因素。TypeScript提供了5种简单的类型:
- Number:整数和符点数类型。
- String:字符串类型。
- Boolean:布尔类型。
- undefined:未定义类型。
- null:空值类型。
在TypeScript中,可以在变量名称后面跟一个类型名,这就限制了这个变量的类型,如果你为它赋一个不同类型的值,TypeScript编译器就告诉你类型不匹配,举个例子,在WisOne IDE中放一个Button,然后双击按钮,编写如下的代码:
module Unit1{ export class TForm1 extends Core.Forms.TForm{ btnTypeDemo: Core.StdCtrls.TButton; btnTypeDemoClick(sender: Core.Classes.TComponent){ var oneNumber:number=1; //定义一个数字类型 var oneString:string=2; //定义一个字符串类型,但是却为字赋了一个数字类型的值。 //输出2个变量的值 console.log("当前的数字是:"+oneNumber+" 当前的字符是:"+oneString); } } }
单击WisOne IDE中的运行按钮,IDE抛出了一个错误的提示,提示我们类型不匹配,如下图:
这就使得在TypeScript中具有了强类型语言的特性,确保了类型的安全性和性能。
在TypeScript中定义变量时,在其后跟一个冒号加变量类型,即指明声明了一个变量,也可以具有如下的可选声明方式:
//声明变量并指定初始值 var numberOfDwarves : number = 13; //仅声明变量不设置初始值,那么值将为undefined. var numberOfGoblins : number; //声明变量不指定类型,类型将会被推断出来,这类似于JavaScript var numberOfHobbits = 1; //声明变量什么也不指定 var lengthOfFilm;
变量也可以被变义为接口类型或者是类类型,在这个系列的后面的内容中会继续进行介绍接口和类的具体使用方法。
TypeScript的String和boolean类型与.NET相似,定义如下所示:
var heroName : string = "Bilbo Baggins"; var orcsNeedAShower : bool = true;
Number类型其实代表的是双精度类型,在TypeScript或JavaScript中都不存在整数类型,这个与.NET有些不同。
null和undefined类型常常容易让人混淆,技术上说,undefined等同于变量未定义或者是对象未赋值,null是指对象已经赋值给变量对象值为null。undefined是一个值,而null是一个对象,一个变量不能指定类型为undefined或者是null,但是可以通过显示的指定值为undefined和null来指定其类型:
// 与这句相同:var numberOfGoblins : number = undefined; var numberOfGoblins : number; //与这句相同:var ageOfGandalf : any = undefined; var ageOfGandalf = undefined; //简单类型也可以指定null值 var ageOfSaruman : number = null; //与这句相同:var ageOfRadagast : any = null; var ageOfRadagast = null; var error1 : Null; //这句抛出异常 var error2 : Undefined; //这句抛出异常
在TypeScript中,有一个类型可以代替所有的类型,如果你没有给变量分配类型,TypeScript编译器将为其指定Any类型,你也可以显示的为一个变量指定Any类型,它允许为其赋任何值,从复杂类型到简单的类型:
var changeling; //隐式的指定Any类型 var morph : any; //显示的指定Any类型
TypeScript会试着推断变量的类型,不过这又陷进了JavaScript的漩涡,因此TypeScript建议我们在定义变量时总是指定一个显示的类型,这样可以确保在TypeScript编辑器中可以得到类型检查或者是编译提示,否则实在是没有必要写TypeScript代码。