目录
二、class 类之间的继承和 interface接口实现:
TS中的高级类型:class类型,类型兼容性,交叉类型,泛型,keyof,索引签名类型,索引查询类型,映射类型。
TypeScript全面支持ES2015中引入的class关键字,并为其添加了类型注解和其他语法。class基本使用:
- // class类型
- class Person {}
-
- // 创建class类型实例:
- const p = new Person()
成员初始化后,才可以通过this.属性名来访问实例成员。需要为构造函数指定类型注解,否则会被隐式推断为any,构造函数不需要返回值类型。
- class Person{
- name: string
- age: number
-
- // 构造函数:
- constructor(name: string, age: number) {
- this.name = name
- this.age = age
- }
- }
定义在类中的方法(函数),通过类的实例进行调用。
- class Person{
- name: string
- age: number
-
- // 构造函数:
- constructor(name: string, age: number) {
- this.name = name
- this.age = age
- }
-
- // 实例方法:
- showInfo(): void{
- console.log("名称:" + this.name + "\t年龄:" + this.age)
- }
- }
通过extends关键字实现类之间的继承关系:
- // 类之间的继承:
- class Person{
- showInfo(): void{
- console.log("我是一个人!!!")
- }
- }
-
- // 子类继承父类:
- class Student extends Person{
- name: string
- age: number
- }
-
- // 实例化子类:
- const stu = new Student()
- // 通过子类实例调用父类方法:
- stu.showInfo()
通过implements关键字可以让一个类实现一个接口:
- // 定义的接口:
- interface FlyAble{
- fly(): void
- }
-
- // 创建一个类实现接口:
- class bird implements FlyAble{
- fly() {
- console.log("flying !!!")
- }
- }
类成员可见性,可以使用TS的权限修饰符:public(公共的),protected(受保护的),private(私有的)。
- class Person{
- public name: string
-
- public showInfo(): void{
- console.log(this.name)
- }
- }
readonly:表示只读,用来防止在构造函数之外对属性进行赋值。
- class Person{
- // readonly表示只读修饰符,只能通过构造函数进行初始化:
- readonly name: string
-
- // 初始化只读属性:
- constructor(name: string) {
- this.name = name
- }
-
- public showInfo(): void{
- console.log(this.name)
- }
- }
两种类型系统:Structural Type System(结构化类型系统),Nominal Type Syetem(表明类型系统)。
TS采用的就是结构化类型系统,也叫做duck typing(鸭子系统),类型检查关注的是值所具有的形状。也就是说,在结构类型系统中,如果两个对象具有相同的形状,则认为他们是同一个类型。
交叉类型(&):功能类似于接口继承(extends),用于组合多个类型为一个类型(常用于对象类型)。