• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

TypeScript面向对象基础知识

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

孙广东  2016.4.5


JavaScript如今到处都是。web、server(通过NodeJS)、移动应用(通过各种框架)。全部这些,TypeScript都能够使用,而且能够为JavaScript扩展出面向对象和静态类型的特征。

TypeScript能让我们提前使用未来的语言特性。甚至很多其它,比如泛型这样的语言特性。

TypeScript代码。终于会编译为地道的JavaScript,兼容一切使用JavaScript的场合。

编译过程主要是编译时检查,一点改写,删除类型批注和接口。删除类型批注和接口这个过程称为类型擦除(Type Erasure)。


我从网上找到一张非常好的图片用来说明类型擦除,例如以下。


我们后面将具体介绍TypeScript并对照他和其它语言的异同,主要是C#



这个话题非常难说清楚,可是非常有必要在提到TypeScript的时候讲一下。这两个词:编译CompilingTranspiling有人译作转译。这是一个英文计算机术语。

一般觉得转译是一种特殊的编译,当将一种源码语言编译成第二种源码语言时。就称为转译

当编译一个c#程序时,是由源码语言C#编译为IL。这就不能称为Transpiling。由于他们是全然不同的东西。

而编译TypeScript程序时,他变成了第二种源码JavaScript,这个就称为Transpiling(转译)

但不管怎样,TranspilingCompiling的特例。Transpiling也属于Compiling

所以TypeScript转译为JavascriptTypeScript编译为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代码文件。一个代码文件能够包括多个ClassClass也能够组成模块。

模块的概念和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,nullundefined.

由于JavaScript没有整数小数这些区分,所以TypeScript也没有加入,统一使用number

另外TypeScript加入了一个any类型,当须要动态类型时使用。

这个与C#的动态keyword是相似的。

TypeScript支持数组类型,通过在类型后面加入方括号定义。比方string[].

也能够自己定义类型。在讲到class的时候我们细说。


类型判断

当右側表达式足以确定变量的类型时。TypeScript能够自己主动确定变量的类型。这个特性C#也有。

比方这个代码



假设在VisualStudio中,鼠标悬停,依旧能够看到这三个变量被识别出来是各自不同的类型。

类型判断还能处理更复杂的类型信息,比方这个代码,无需类型标注就可以获得静态类型的优点。


写完这个代码以后,之后再键入example,再敲入.,也能够获得自己主动完毕提示。.name,.id.collection.

类型判断始终是有局限性的,基本上是依靠右側表达式来判断。

假设声明变量时没有判断出来,事后赋值也判断不出来了。

比方以下的代码。



当声明变量时无法判断出,变量即被标注为 any 类型,any类型全然没有不论什么类型安全方面的保证。当然自己主动完毕功能也没有。

类型批注

TypeScript的类型是设计为批注,而不是定义。是可选的。所以和C#的类型写在前面不同,类型是以可选的形式写在后面的。

我们将上面的全部代码都加上类型标注



这些标注的加入和上面自己主动类型判断的结果是一样的。可是阅读代码的人就能够一眼看出。

模块、类型、接口

TypeScript的模块用于代码组织。相似C#namespace

一个模块能够包括多个类和接口。能够将类和接口私有化或者导出,导出的意思就是公开,让其它模块能够訪问他们。

TypeScriptclassC#class意义同样。实际上TypeScript的一个亮点就是他隐藏了JavaScript的原型设计,而是採用了更流行的基于类型的面向对象方式。

你能够扩展其它的class,实现多个接口,加入构造函数。公开属性和方法。这些都和c#class非常相似。

属性和方法能够使用public private訪问修饰符修饰。当在构造函数的參数上使用訪问修饰符的时候,他们会自己主动为该类型加入同名的属性。

请非常小心这个语法。这和非常多语言都不同



如图中Point的构造函数參数xy 使用了public 訪问修饰符,所以会自己主动生成Point的成员变量xy。这是TypeScript的特有语法。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Typescript引用类型--字符串发布时间:2022-07-18
下一篇:
Vue+TypeScript+ElementUI封装表头查询组件发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap