关于约束中的继承

首先我们知道,类是可以通过extens继承的,那样表示子类在一定的程度上可以使用父类的参数,

 

关于约束中的继承_第1张图片

我们可以清楚的看见,Son类通过extend关键字继承了Father的类,然后Father中定义了一个name的属性,而在son类中则没有定义,但是通过super()方法调用了以后,Son类中就可以使用name属性,且并没有报错;

这便是继承,在某些不是私有保护的情况下,子类是可以毫无保留的使用父类的属性,甚至方法,

但注意,这是没有私有保护下呦;什么是私有保护,暂时咱没有提及,所以请大家动动手指先去查询一下

好我们回归正题;

看过官网的小伙伴们,一定也知道我们的接口和类型也是拥有继承的,不过既然是来查询的,一定有什么地方不是很了解,接下来鄙我微薄的学识尽量说明白

  • 关于interface的继承

首先我们来看一段代码

关于约束中的继承_第2张图片

此时我们可以看见上面的代码定义了两个interface和一个函数,函数里面有一个参数,参数我们用obj2所限制住了,而我们看见obj2里面定义的只有一个 sex属性,但通过传参我们却看见,参数所传递的是三个参数,三个参数中除了有我们obj2【sex】属性,还有【name】与【age】属性,细心得小伙伴可以发现,这两个属性则是obj1中的两个属性;

而这都是因为obj2中使用了继承,继承了obj1的属性,而他的继承方式则是和class类中的继承类似,都是使用extends关键字实现的继承,而继承者,拥有父组件的属性;

且要注意的是,interface继承和类继承有所不同,interface可以实现多一继承多

关于约束中的继承_第3张图片

关于interface与class之间的继承


interface不仅可以与interface之间 可以实现继承,他与class之间实现继承;

关于约束中的继承_第4张图片

如上面的类与interface可见,它与interface继承interface并无太大的的差别,但细心得小伙伴就会发现了,class与interface的继承关键字并非是extends了,而是变为了implements关键字,且鄙人圈下的应该必须写,否则会报错,至于它的类型则无需再次定义了,因为他所继承的已经定义的清清楚楚了,除非你想再次定义一个新的字面量;

而说到类,我们第一时间想到的自然是类的静态属性与实例属性了,但我们的类可以写静态属性这点是毋庸置疑的了,但它能写实例属性吗?并且class能得以继承吗?

of course 

而这点,官方文档也早有定义了,那么我们,接下来这个例子就以官方文档的来看

我们一眼望去,这一片代码中有两个接口,一个类,而类继承了其中了一个接口,然后我们又定义了一个函数,函数里面需要三个参数,而三个参数最左边的被我们的一个接口所定义,另外两个分别是两个number类型;然后我们终调用了这个函数,并为它传递了三个参数

 这次我们使用倒推法来看着一片代码:

关于约束中的继承_第5张图片

首先,我们先看他传递了三个参数,第一个参数,它传递的是我们定义的class类[DigitalClock]。但是我们看到,我们定义的第一个参数并不是一个类,而是一个我们定义的【 ClockConstructor】口,它内部包含着一个new关键字,这便意味着,我们第一个参数必须是一个class类型,且constructor中所签名必须符合new关键字中所需要的签名(也就是  constructor(h: number, m: number)==new(hour: number, minute: number)【请注意:这里的是==,并不是===,也就是你是严格意义上的全等】),所以我们第一个参数传递是一个clsaa类的参数,而第二个与第三个也就好解释了,他们分别是new关键字中所需要的参数;

有人便会问了:这样不是脱裤子放屁吗?直接写一个类,然后直接new它不香吗?说实话,如果是我,我也会这样做,但是为什么还要去理解它呢?

因为,我们要从更深层次的去了解它那强大的约束力,去学习它是如何对代码进行约束的,然后加以致用,使自己的代码更加规范化,日后维护页更加容易维护

关于TS的泛类继承

其实关于继承,还有一种更加常规使用方式,就是泛类继承;

既然是泛类继承,那么我们首先要了解什么是泛类

泛类:简单来说,就是先使用,后定义的一种类型,更加广泛的运用于函参数的定义上,

于是我们先来看一段代码:
关于约束中的继承_第6张图片

 首先,这里的可以理解为是一种占位符,也可以理解为一种另类的参数【尖括号(<>)里可以是26个英文字母中的任意一个】,它是由面函数调用后尖括号中传入的值赖决定它的类型;

如同我们这个函数中传入了一个number类型,T的类型就变成了number类型,倘若此时传入的是一个string类型,则它的值就转换成了string类型,所以我们前面说,也可以将泛类看成一个特殊的参数,这是这个参数,决定了某些参数的类型

那么什么是泛类继承呢?
我们同样也是来看一段代码

关于约束中的继承_第7张图片

我们通过上面的图片可以看到,我们定义了一个interface与一个函数,函数的类型我们也是用了一个泛类,但是此处的泛类,运用了一个extends关键字,继承了我们定义interface;而且我们发现,此时的,并没有让我们调用函数时传入“参数”,那么这是为什么呢?
这是因为,由于我们的继承,将泛类的定义写死了;它使T的范围就在我们interface之类,他相当于T===obj,等同于一下的代码

关于约束中的继承_第8张图片

 那么可以这样写为什么还要用一个泛类呢?那是这样能让结构更加的清晰;

 

 

你可能感兴趣的:(关于我认为的TS,ts,web,前端)