TypeScript彻底解读(26课时)_9.TypeScript彻底解读-TS中的类

9.TypeScript彻底解读-TS中的类

建立class.ts文件,并在index.ts内引用es6

 

建立一个类,这个类在建立好后有好几个地方都标红了ide

这是tslint的一些验证规则函数

一保存就会自动修复,视频中是能够修复的  估计我本身的电脑不必定会自动修复,这个错误的主要问题是属性和方法前面要加修饰符测试

表示它是公共的方法和属性this

常见实例并输出eslint

输出的结果视频

一样可使用继承来封装一些特性blog

eslint的限制,一个ts文件里面只能定义一个类继承

因此就须要去掉这个限制接口

建立你分类,子类继承了父类,在里面的构造函数内执行super方法,这样父类的name属性就继承过来了,这和咱们在es6中建立的并无什么区别,这里只是增长了一些类型的定义

修饰符

定义一个私有的属性 age

调用私有的属性就报错

在类上也访问不到这个属性

定义一个子类继承父类,调用super方法,打印super.age一样报错,经过super关键字只能访问基类的公共方法

protcted受保护

继承该类的子类能够访问

protcted修饰构造函数,就不能使用父类去建立实例,不然就会报错

可是能够经过子类去建立实例

readonly

在类里面能够适应readonly修饰符设置属性为只读的。设置只读的属性只能读取,可是不能修改

既是公共的又是只读的name属性,能够输出name的值

修改name的值。不能修改,由于他是只读的属性

参数属性

定义一个类A,定义了一个空的构造函数,可是tslint验证不经过。

tslint内关闭这个选项便可。为了测试用,通常在实际的项目开发过程当中,尽可能不要这么去操做

由于咱们只是接收参数,并无this上设置属性值

下面使用参数属性,给参数加上三个修饰符中的任意一个便可。

咱们访问这个属性也是能够的

属性上加上private就不能再去访问这个属性的值了

由于这个属性是私有的

加上参数修饰符,既会帮你指定这个属性是什么类型的,并且还会把你的这个属性放到实例上

静态属性

age是一个静态的属性

一问你这个属性是静态的

 

直接访问类上的这个属性,是能够访问到的,age是类的静态属性,只有类自己可以使用

把age设置为私有的private,保存的时候,tslint会建议把私有的属性放在公有的方法后面。

因此一保存了文件,私有的属性就被自动放到pulic方法的后面,固然这是视频中的效果,个人机器不必定会这样。。。

咱们再去访问p.age就会报错了

类自己去访问也不行

以上就是静态属性

可选类属性

22分46

name是必选的 因此这里必须传入name的属性。

public sex是参数属性

由于没有传值,可是sex属性仍是存在的

存取器

至关于es6中的存值函数和取值函数,在设置 属性值的时候调用的函数,用法和写法和es6的没有区别

调用存值器

这里是由于用下划线的eslint不容许

咱们在tslint里面把这个关掉

调用infoStr存值器函数,就会打印出这句话同事给私有属性_infoStr赋值

抽象类

一般被其余类继承,而不直接建立实例,抽象类和内部定义的抽象方法都是用abstract关键字

构造函数什么也不写,

在使用abstract构造一个抽象方法,方法须要修饰符。抽象类建立实例就会报错。没法建立抽象类的实例

它只能被类继承,定义一个man类继承people这个类

若是要实现printName这个方法就要在Man类里面去实现这个方法,这样就可使用man去建立实例了

abstract不只能够标记类和方法,能够标记类里面的存取器

P类继承了People,必须实现里面的抽象属性_name

 

同时还要实现里面的insideName方法。抽象方法和抽象存取器都不能包含实际的代码块

 实例属性

当咱们定义一个类,并建立实例后,这个实例的类型就是 它建立的类

也就是说咱们这个类既是一个值也是一个类型

建立一个类People,P2实例化People这个类,

p2的类型就是people类

也能够明确的制定类型就是people,可是这里是能够省略的,会自动根据你建立实例的类去推断出你的类型

定义一个animal的类,内部也是一个空的构造函数和People相同,p2去实例化Animal类也是没有问题的

类、类型接口

定义接口,里面定义type属性,定义类去继承这个借口,用关键字 implements

 实现接口,子类必须也要定义属性type

 实现接口的类 给type属性前面加上 static关键字。就会报错了。

static修饰了智能经过类自己去访问。在实例上就不会有这个type属性。接口的监测的是使用该接口定义的类建立的实例。因此实例上没有这个type属性,因此这里就会报错

因此你要保证这个类建立的实例要符合这个接口

 接口继承类

接口继承了类后,接口会继承这个类的成员,可是不包括实现。也就是只继承成员和他的成员类型,接口还会继承类的private和protected成员,当接口继承的类中包含这两个修饰符的成员时他的接口只可被这个类或者它的子类去实现

定义类A里面定义一个受保护的属性name

I继承类A,里面什么也不实现

I里面什么也不实现,必须关闭tslint的选项。这里关闭就容许里面什么也不定义的空接口了。

定义类B实现接口I,这里就报错了,I继承了类A的属性,可是咱们在继承接口I的时候并无定义name属性

在B里面实现name属性,仍是会报错。这是由于peotected修饰符的特色

受保护的属性只能在继承这个类的的子类中去访问,B并非继承了这个类A,因此这里无法使用这个name属性

类B继承类A再去实现接口I,这样才能够

在泛型中使用类类型

create函数传入的参数是一个类,返回的是一个类建立的实例

new()表示的是调用这个类的构造函数,他的类型也就是建立实例后的类型

也能够实行这个传入的类型

输出咱们建立的实例

给这个类Infos加上构造函数,就会有输出了

能够直接访问age属性是没有问题的

相关文章
相关标签/搜索