00:00
好,下面呢,咱们来说一说TS当中的接口啊,TS当中有个核心啊,或者说核心之一是什么呢?对值所具有的结构进行类型检测,或者说检查,就说在TS当中我们定义一个变量,变量应该是有类型的。将来我们为这个变量赋值的时候,它的数据类型如果不对,它会提示我们是吧?如果说我有一个函数,函数的参数是某个类型的,那将来你调用函数里边穿参的时候,没有符合这个类型,也会给我们报错,是不是?哎,那在TS当中我如何去搞定这个类型检测的问题呢?我们是可以使用接口的方式。来定义对象的类型的,也就是说对象的类型我们可以定义成接口。比如说当我将来来了一个对象,这个对象的类型可以是一个接口,然后呢,从而对这个对象内部的属性及方法进行一个。的限制构成约束啊。接口是对象的状态和行为的抽象,这句话说的比较抽象,不太容易理解啊,咱们可以慢慢来啊,我先把它复制一下放到上面来。
01:07
哎,放这来,咱们可以怎么理解这个接口呢?它是一种是一种什么呢?一种类型是一种什么呢?规范我说是一种什么呢?规则我说是一个能力。啊,这都行,我说是一种约束。那我用了多个词来描述这个接口啊,所以说你怎么理解都可以是吧,我说这个接口是一种规范行不行呢?行,我说这个接口是一个能力,这个能力可以帮助我们做什么事情也行,说它是约束也可以啊。所以说这个东西要什么呢,方便我要要慢慢的去理解啊,暂且我们还可以认为是什么呢,我说这个接口实际上可以是某个对象的类型。所以说我说接口是一种类型,它也是可以的啊好,那咱们来试试啊。
02:01
先写代码,然后再慢慢理解啊很容易,这个东西我们来看。啊,这有个需求,说创建人的对象需要对人的属性进行一定的约束,比如说将来我有个对象是吧,它的ID是数字类型,必须得有。啊,而且是只读的,不能随便改是吧?就好比人出生了有自己的身份证号码,你的身份证号码你只能是什么呢?上面给你分配的,你不能随便自己去改,如果改那不就出事了吗?是不是只读的啊,名字是字符串就行。必须得有是吧?还有age是数字类型,必须也得有,还有什么呢?性别这东西可有可无啊,我也不太明白,针对于当前的社会啊,这有些人的性别是可以变化的啊,这太神奇了,有机会的话一定可以去尝试尝试啊。嗯,行了,这个咱们就不多废话,咱们来看这个需求,并且呢,编写代码来看看接口是怎么工作的啊,那我这边简单一点,把这个什么呢,把需求拿过来啊,直接从这到这复制一下。
03:01
然后回到这里边来。嗯,格式化一下,并且把它们注释一下啊。那按照这种情况来看的话,也就是说我应该有个接口,这个接口呢,呃是一种类型,把这个接口类型定义出来,定义完了之后呢,将来给对象,这个对象呢,在声明的时候或者定义的时候,它的类型就应该是我这个接口啊,啊简单理解就是说啊,定义一个对象,然后呢,该对象嗯嗯嗯嗯嗯,该对象的类型就是我。定义的这个接口啊,比如说I person啊看啊来一个comes person per冒号I person是吧,等于来这么一个对象里边应该有ID呀,是不是给个ID呗,那就来一个,比如说是一呗是吧,再应该来一个name呀,字串类型呗,字串类型给他来一个肖甜甜啊,我喜欢的好,再来一个什么呢?诶加个逗号啊,再来一个age,给他来一个18岁一朵花还没开呢,再来一个sex,来个小女孩子。
04:04
是吧,但是报错了,哪有a person的这种类型是吧,根本找不到,那是为什么,因为我没有定义啊,所以说这个位置我们定义一个什么呢?接口类型,哎,可以这么认为,说我定一个接口类型是吧,或者定一个接口。然后呢?逗号该接口作为诶作为什么呢?对象作为person对象。PN对象。对象的什么呢?类型使用这样呢,可以限定或者是约束该对象中的属性数据,哎,那个interface I person为什么是I啊。首先I是因为什么呢?当前这个接口它的单词是interface I开头的嘛,所以说就是I开头,呃,然后呢,后边这个名字随便改吧,因为我是描述一个人嘛,是吧,所以说我就写的是person啊,那这里边我怎么去限定它呢?是不是看啊发没发现我上边这样一写完之后,下边就不报错了呀。
05:06
是不是,那我如果这样写行不行呢?它也可以,也没有报错吧,好,注意。我写了一个ID。那些?我就写了这么一句话,然后就给我报错了,编译也报错了,为啥呢,我们放到这。说不能将类型ID number name string number string分配给类型。对象文字可以只指定已知属性,并且name不在I当中。换句话来说,我有一种类型叫做I person类型。我的I类型当中只有一个属性是ID,并且是number类型。结果呢,说你的这个对象的类型是我的IP类型。然后呢?我上边只有一个属性啊,你写了这么多是吧,他就报错了,所以说有人就说那你删掉它呗,是吧,删掉这个下边报错,把它也删掉呗,是吧,删掉这个下边也报错。完了,白写了是吧?抗RZ,抗R抗RZ啊,回来啊,没写完嘛,是吧,下一个我们可以来一个name,诶,写上是吧,下边那个搞错了,再接着写,再来一个age number呗,是吧,好,再接着写sex,再来一个什么string,好写完。
06:14
就是说我来了一个接口是吧,这个接口可以认为是一个类型,或者说一种规范,或者说一种规则是吧,这都行,然后呢,你定义的对象,这个对象就应该是我这个接口类型的。是吧,我上边有啥你就能写啥,我上面写了四个,你下边写了三个,行不行,保存一下我们来看。直接就报错了是吧?B也出错了吗?我们来看看。啊,不行,以声明person,但从未读取稀值,因为我还没有用啊,这个正常说类型ID name a中缺少属性sex,但类型I当中需要改属性,那所以说嘛,我们再来看啊,人家定义四个,你给三个是不行的,要不然你用我这个类型干嘛呀,是不是,但是也有问题。说ID是number型必须有,而且是只读的,我现在觉得是必须的有,但是呢,是只读的吗?我们来看看吧。
07:06
把握在这cancel点儿log啊,括号写个person,我们先看看啊,能不能正常的显示和输出。我们来看。ID name是吧?我再去做一件事情,我来个person.ID等于个100,然后can.log括号person我就不信了是吧?咔一下子,走一下吧。我们来看改了,这就说明现在不是只读的这个玩意儿啊。这个东西ID属性此时我说现在此时是什么呢?可读可写,不符合我的需求啊,对吧,那怎么办呢?哎。这个时候我们学到一个东西啊,来看看。有一个词。在下边的啊。呃,在哪呢?在这个位置呢?啊,就什么叫做read only只读属性,也就是说当某一个属性它的值是只读的的时候,此时我们可以使用read only这个关键字。
08:06
诶,那怎么用呢,是吧,咱们来看一下啊。Read only,我们来看看啊,我如果在这个位置写上一个read read only,咱们看看行不行呢,保存一下。啊,诶,我们看。怎么了?这个位置无法分配到ID,因为它是只读属性说明很有意义是吧?等于说这个read only能不能放在后边呢?你放在后边的话,人家会认为read only是ID的类型啊是吧,所以说不行啊。那有人说我放后边行不行?这也是不行的啊,注意啊。捡过来拿回来啊。Read only放在前边,此时啊,代表只读的啊,ID是只读的。然后呢,是什么呢?Number类型。对吧,这个问题就搞定了吧,对吧,然后我们再来看name是string型,必须有。那那我这一写上之后,就代表已经必须有了嘛,是吧,Age也是如此啊,现在啊,这个位置已经出错了,我们就不能再这么写了,编译都已经不通过了是吧,何况结果呢?
09:09
那我这个蛋白也除掉啊,还有什么需求啊,Sex是string型,可以没有,什么叫可以没有。可以没有的意思就是说此时啊,这个位置,这个位置注意了。这个属性没有也是可以的,那太好了,那我就删掉呗,是不是结果又报错了说什么。类型它它中缺少sa,但类型icon当中需要该属性,说这么写不行。啊,那怎么解决呢?我们只需要在它的后边加上一个问号。啊,注意啊,不是在这儿啊,是在上边。加上一个什么问号?此时啊,我要是把它给去掉了,我们再来看,我已保存,而且也没有任何报错是吧,然后我们输出这个person当中,它也是可以的。啊,现在是ID呀,内膜age是吧,好。ID,那我如果说这是现在是三,那我如果说在这个位置这么做。
10:04
那这么走,我说嗯,这么写吧,Person点啊sex给他来上一个什么呢女,然后呢,我再输出一下这个person,看看可不可以。那我们再看,诶是不是就多了一个萨属行吧,那按照这个操作来看的话,那我这么做行不行,我再来一个person点什么呢?嗯,来一个on money,嗯,等于这个。好多好多钱保存一下,编译出错了是吧?Money我们再来看看,说类型,IPO上不存在属性,Money不行,是这个添加是不行的啊,但是sex是可以的,所以说啊,这个代表的是什么呢?只读的不是这个代表是可有可无的啊,可有可无的啊,可有可无的这是问号。问号代表可有可无,这个read only代表的是ID,是只读的啊,这个要注意。好。刚刚呢,咱们说一说这个接口啊,就是刚开始认识这个接口,可以认为是一种规范的一种约束啊,是吧,它可以作为对象的类型去使用,是不是非常方便,那如果说我想设置对象当中的某个属性可有可无,那我可以在这个属性的名字后边加上一个问号。
11:18
是吧,哎,如果说我希望这个属性是只读的,那我可以在这个属性前面加上一个什么呢?叫做read only是吧?非啊这呢在这呢非常的方便啊,这样呢,大家对于接口这个东西也有了一些印象是吧。呃,然后再往后啊,看这可选属性的好处之一是可以对可能存在的属性进行一对一。好处之二是可以什么呢?补过引用了不存在的属性的,使得这个错误啊。这是这个什么呢?可有可无啊,指读这块咱们也已经搞定了啊。最简单的判断该用read only还是count的方法是要看它要把它作为变量使用,还是作为一个属性使用,作为变量使用的话,那我就count要若作为属性则使用什么呢?Only这个是什么意思啊,就是说。
12:09
我们在这个位置啊。这个位置。用的是read only。是吧,那我可不可以用呢。有同学可能会想说一个变量它的这个值啊,如果不希望改变,我就用cost代替这个let去修饰是吧?那如果要是这个样子的话,那这个变量的值不也不能改了吗?当然如果是这种普通类型的话,是吧?那我们现在在这个位置写上一个Co。我们来看怎么了,报错了是吧,哎,不行。还得用read only啊,所以说要想把这个属性变成只读的,注意啊,用的是read only,而不是count,所以说这块有这么一句话,说最简单的判断该用read还是Co的方法是要把它作为变量使用,还是作为一个属性使用,是吧,如果要是一个变量,那我用cos没有问题,前提是。
13:00
这个变量应该是普通类型。哎,如果要是作为一个属性,那我就得用什么呢?用read only,而不是用cost,而且刚才呢,我已经在这给大家去演示一下,Cost是不行的啊,这个要注意。修饰属性,想要设置该属性是只读的啊,是不能使用的啊,这个要注意了,好了至此啊,这个接口的出大,或者说刚刚接接触这个接口这个东西咱们就先说到这里啊。
我来说两句