学习 TypeScript:Classes

TypeScript 提前实现了 ES6 中经典的面向对象的类,官网教程:Classes

简单的例子

类的继承

关键字super代指父类,比如有另外一种继承方式,子类有自己的构造函数:

甚至你可以在子类的构造函数中直接初始化父类

然后实例化的时候,就不需要传入参数了,如下:

公有与私有的定义

当一个变量前面未带访问控制符的时候,默认是公有,如果要变为私有,必须要加上访问控制符private,当然我们也可以显示声明public

一种简写方式:

深入理解私有属性

当我们比较两个不同的类型的时候,无论他们来自哪里,只要他们的成员彼此一致,我们就认为这两个类型也是相等。但是当两个类型都有私有属性的时候,我们的判定方式不一样了,其中一个的私有属性必须是来源于相同的声明(originated in the same declaration),比如是继承于同一个父类的私有属性,或者这两个对象就是父类与子类的关系:

访问器

如下例子,在用户进行操作之前,我们确保他有可用的密钥。使用set方法来检查密钥,相应的get方法也被加入。

注意:只有 ES5 才支持访问器方法(get/set),但是 TypeScript  默认编译为 ES3,所以你需要在编译时指定为 ES5,参数项为:--target es5,简写--t es5

如果你是在 SublimeText3 中编译,只需在 Build parameters 中写入上述参数即可。如果是在 cmd 中编译,命令为:tsc --target es5 file.ts

静态属性

在此之前,我们讲解的都是实例成员,但是作为类的重要组成部分的静态成员却不能忽略。
注意:访问实例成员使用“this”指代当前实例对象,但是如果访问静态成员,则使用“Class(类名)”指代当前类,见如下示例:

类中的深入技巧

在 TypesScript 中创建一个类的时候,实际上是声明了多个类型,第一个声明的类型就是类的实例类型。在第一段示例代码中的“var greeter: Greeter;”,我们把Greetr当做 Greeter 类生成的实例greeter的类型。换而言之:如果要问用 Greeter 类生成的实例greeter是属于什么类型?答案是 Greeter 类型。

实现中,我们不需要申明实例的类型,默认与类一致,所以简单语法为:var greeter = new Greeter("world");

将类赋值给变量

把类当作值传递给一个变量,我们使用“typeof Greeter”,意思是:把“Greeter自身的类型”而不是实例的类型传递给greeterMaker。或者更确切的说:“把一个叫作 Greeter 的符号的类型给我(give me the type of the symbol called Greeter)”。

同样,我们也可以不指定类型,TypeScript 默认为我们处理:var greeterMaker = Greeter;

用作接口的类

就像我们之前所说,类申明了两个东西:一个是实例的类型,一个是构造函数(代表类自身的类型)。正因为申明了类型,所以也可以被用作接口。

发表评论

电子邮件地址不会被公开。 必填项已用*标注