在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
孙广东 2016.4.5 JavaScript如今到处都是。web、server(通过NodeJS)、移动应用(通过各种框架)。全部这些,TypeScript都能够使用,而且能够为JavaScript扩展出面向对象和静态类型的特征。 TypeScript能让我们提前使用未来的语言特性。甚至很多其它,比如泛型这样的语言特性。 TypeScript代码。终于会编译为地道的JavaScript,兼容一切使用JavaScript的场合。 编译过程主要是编译时检查,一点改写,删除类型批注和接口。删除类型批注和接口这个过程称为类型擦除(Type Erasure)。 我从网上找到一张非常好的图片用来说明类型擦除,例如以下。
我们后面将具体介绍TypeScript并对照他和其它语言的异同,主要是C#。 这个话题非常难说清楚,可是非常有必要在提到TypeScript的时候讲一下。这两个词:编译Compiling,Transpiling有人译作转译。这是一个英文计算机术语。 一般觉得转译是一种特殊的编译,当将一种源码语言编译成第二种源码语言时。就称为转译。 当编译一个c#程序时,是由源码语言C#编译为IL。这就不能称为Transpiling。由于他们是全然不同的东西。 而编译TypeScript程序时,他变成了第二种源码JavaScript,这个就称为Transpiling(转译)。 但不管怎样,Transpiling是Compiling的特例。Transpiling也属于Compiling。 所以TypeScript转译为Javascript。TypeScript编译为JavaScript,都是没有问题的讲法。 TypeScript语言特性这里高速介绍一下TypeScript的关键语法,比方显示类型批注、类、接口。 尽管C# Java程序猿都非常熟悉面向对象。但TypeScript并不基于C#,所以还是有所差别的。 TypeScript是静态类型语言,须要编译。拥有编译时类型检查的特性。 编译时类型检查能够确保类型安全。并方便开发更智能的自己主动完毕功能。实际上TypeScript的各种开发工具都做得非常不错。 比方VisualStudio,编写TypeScript文件时,就比编写JavaScript要聪明的多。 这就是静态类型带来的优点。 TypeScript文件TypeScript文件的扩展名为”.ts”,你能够使用非常多工具编写.ts文件,比方visualstudio。很多其它信息。请看官网http://www.typescriptlang.org/ 官网还提供了一个在线编写測试.ts文件的环境http://www.typescriptlang.org/Playground/ 一个TypeScript应用包括多个TypeScript代码文件。一个代码文件能够包括多个Class,Class也能够组成模块。 模块的概念和C#中组织类型的namespace比較接近。 运行时。TypeScript编译得到的JavaScript能够通过Html标签<Script>加入网页中,也能够使用其它的模块载入工具,比方NodeJS就内置了模块载入工具。 不使用模块组织依赖的时候,一个TypeScript文件依赖还有一个TypeScript文件,应该加上引用凝视
(这是可选的。一般也不使用命令行编译。大部分图形化工具不加也能够)。 当使用模块载入工具的时候(比方RequireJS。或者NodeJS内置载入工具),代码例如以下:
不知道啥时RequireJS的同学请自行补课。 当你使用import语句的时候,是有两种模式的,CommonJS 和 AMD模式,他们编译为JavaScript生成的代码不同,这个依据你使用不同的载入工具请自己设置TypeScript编译选项。 注:RequireJS使用CommonJS模式,NodeJS使用AMD模式。 类型TypeScript的基本类型有 string,number,boolean,null和undefined. 由于JavaScript没有整数小数这些区分,所以TypeScript也没有加入,统一使用number。 另外TypeScript加入了一个any类型,当须要动态类型时使用。 这个与C#的动态keyword是相似的。 TypeScript支持数组类型,通过在类型后面加入方括号定义。比方string[]. 也能够自己定义类型。在讲到class的时候我们细说。 类型判断当右側表达式足以确定变量的类型时。TypeScript能够自己主动确定变量的类型。这个特性C#也有。 比方这个代码
假设在VisualStudio中,鼠标悬停,依旧能够看到这三个变量被识别出来是各自不同的类型。 类型判断还能处理更复杂的类型信息,比方这个代码,无需类型标注就可以获得静态类型的优点。
写完这个代码以后,之后再键入example,再敲入.,也能够获得自己主动完毕提示。.name,.id.collection. 类型判断始终是有局限性的,基本上是依靠右側表达式来判断。 假设声明变量时没有判断出来,事后赋值也判断不出来了。 比方以下的代码。
当声明变量时无法判断出,变量即被标注为 any 类型,any类型全然没有不论什么类型安全方面的保证。当然自己主动完毕功能也没有。 类型批注TypeScript的类型是设计为批注,而不是定义。是可选的。所以和C#的类型写在前面不同,类型是以可选的形式写在后面的。 我们将上面的全部代码都加上类型标注
这些标注的加入和上面自己主动类型判断的结果是一样的。可是阅读代码的人就能够一眼看出。 模块、类型、接口 TypeScript的模块用于代码组织。相似C#的namespace。 一个模块能够包括多个类和接口。能够将类和接口私有化或者导出,导出的意思就是公开,让其它模块能够訪问他们。 TypeScript的class和C#的class意义同样。实际上TypeScript的一个亮点就是他隐藏了JavaScript的原型设计,而是採用了更流行的基于类型的面向对象方式。 你能够扩展其它的class,实现多个接口,加入构造函数。公开属性和方法。这些都和c#的class非常相似。 属性和方法能够使用public 或private訪问修饰符修饰。当在构造函数的參数上使用訪问修饰符的时候,他们会自己主动为该类型加入同名的属性。 请非常小心这个语法。这和非常多语言都不同
如图中Point的构造函数參数x。y 使用了public 訪问修饰符,所以会自己主动生成Point的成员变量x和y。这是TypeScript的特有语法。
全部评论
专题导读
热门推荐
热门话题
阅读排行榜
|
请发表评论