TypeScript 的高级特性

Unsplash

1. 类

在 ES5 中是没有 类(Class) 的概念的,我们通常会通过构造函数定义并生成新对象,而在 ES6 中引入了类(Class)的概念,但 class 的本质是一个语法糖,只是让对象原型的写法更加清晰,而在使用 TypeScript 开发时,大部分代码都是写在类里面的

使用 class 关键字 + 类名即可完成 类的声明,可以在类里面指定属性和方法,声明一个类之后,我们就可以通过 new 关键字进行实例化

类的实例化

在声明一个类的时候,我们可以给类的属性和方法指定一个访问控制符,其作用是控制类的属性和方法能否在类外部被访问到,访问控制符一共有三个,public 为共有的,即在类的内部和外部都能被访问到,不声明访问控制符,默认即为 publicprivate 为私有的,即在类的外部无法访问;protected 为受保护的,在类的内部和子类当中可以访问到

访问控制符_1

访问控制符_2

访问控制符_3

类的构造函数 其实就是类里的一个方法,该方法只会在类的实例化时被调用,并且只会调用这一次

类的构造函数

运行结果

了解了构造函数之后,我们就可以通过构造函数来建立一个约定,例如,在实例化 Person 类的时候,必须指定 name 属性,而在构造函数当中,必须给属性写上访问控制符,只有写上访问控制符,才是声明了 name 属性

构造函数_1

构造函数_2

类的继承 通过 extends 关键字来声明一种继承的关系,即当一个类继承另一个类时,它就拥有继承类的所有属性和方法,我们还可以在新声明类里指定新的属性及方法

类的继承extend_1

类的继承extend_2

除了 extend 关键字外,类的继承还有一个 super 关键词,这里的 super 有两个用法,一个是调父类的构造函数,这里有个硬性规定是 子类的构造函数必须调用一下父类的构造函数,第二个用法是,用来调父类的其他方法,通过 super. 进行调用

类的继承super_1

类的继承super_2

运行结果

2. 泛型

泛型(generic) 指的是参数化的类型,一般用来限制集合的内容,我们结合上个例子进行说明,我们声明一个 n2 数组,并指定 Array 类型,在类型后加上 <Person> 来限制该数组,它规定了这个数组里只能放 Person

泛型

3. 接口

接口(interface) 是用来建立某种代码约定,使得其他开发者在调用某个方法或创建新的类时必须遵循接口所定义的代码约定,JavaScript 里是没有接口这一概念的,而 TypeScript 中提供了两个关键字来支撑接口这个特性

使用 interface 关键字 + 接口名即可声明一个接口,接口有两种使用方式,一种是作为一个方法的参数类型声明,使用这种方式时,JavaScript 会检查传入参数是否满足接口声明的所有属性,第二种用法是,在接口里面声明一个方法,那么所有声明实现这个接口的类必须得实现这个方法

接口_1

接口_2

4. 模块

模块(Module) 可以帮助开发者将代码分割为可重用的单元。开发者可以自己决定将模块中的哪些资源(类、方法、变量)暴露出去供外部使用,哪些资源只在模块内使用

模块

5. 注解

注解(annotion) 为程序的元素(类、方法、变量)加上更直观更明了的说明,这些说明信息与程序的业务逻辑无关,而是供指定的工具或框架使用的,下面的这段代码是 Angular 2 框架中的注解示例

import { Component } from '@angular/core'

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']
})

export class AppComponent {
    title = 'niangao'
}

6. 类型定义文件

类型定义文件(*.d.ts) 用来帮助开发者在 Typescript 中使用已有的 JavaScript 的工具包,例如 jQuery,具体可参考 Github DefinitelyTyped 项目,这里再给大家介绍一个工具 Typings,这是专门用来安装类型定义文件的

参考资料 TypeScript入门——JoJozhai

End of File

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jerry的SAP技术分享

使用javap深入理解Java整型常量和整型变量的区别

下面我们就用javap将.class文件反编译出来然后深入研究Java里整型变量和整型常量的区别。

15530
来自专栏河湾欢儿的专栏

第一节预解释、作用域、this原理

10620
来自专栏Pulsar-V

GTK基础操作类

1 类型定义 整数类型:gint8、guint8、gint16、guint16、gint31、guint32、gint64、guint64。不是所有的平台都提...

28450
来自专栏乐百川的学习频道

Powershell快速入门(二) Shell编程

这一部分着重于介绍Powershell的程序知识,让我们能够编写功能强大的Powershell脚本,执行比较复杂的任务。 变量 变量使用$变量名创建和引用。举个...

370100
来自专栏lgp20151222

理解一下策略模式,工厂模式

开发遇到了一个工厂模式和策略模式合起来的代码,觉得真的是写的太好了,所以打算了解下这两个模式的区别。

13810
来自专栏xx_Cc的学习总结专栏

C - 基础总结

366110
来自专栏专注 Java 基础分享

Java 的异常处理机制

13620
来自专栏玄魂工作室

如何学python-第三课 基础字符串操作

在上一篇文章中,我们学习了有关变量和输出的一些基础知识。大家应该还记得在上一篇文章中出现的字符串类型(string)吧!说白了,string类型其实就是一堆单词...

27090
来自专栏极客慕白的成长之路

JavaScript代码压缩细节

对于Javascript来说,提高网络下载的性能最直接的方法就是把JS文件体积减小。

10120
来自专栏PHP实战技术

你应该这个姿势学习PHP(1)

  应用场景:能防止sql的注入(当然并不完全是可以,我们可以使用pdo进行预处理然后方式sql的注入,安全不能只靠一种方式防止事情的发生)

532170

扫码关注云+社区

领取腾讯云代金券