00:00
好了,接下来呢,咱们来说一说泛型啊,泛型是啥?然后怎么去用咱们呢,先去解释一下它的概念,然后呢,再提一个需求,根据这个需求呢,咱们再来看看泛型是怎么回事啊。好,首先呢,我把之前函数相关的一些内容啊,把它单独的放在一个目录里边去。这回呢,咱们开始讲泛型了啊。零四。这个是函数。好,放到这里边儿来,然后把这些东西全都给它删掉,不要了。OK,然后这边呢,代码我就先注释掉也不用。新建一个文件啊零一。这是泛型。点TS。在m.tS里边,我们去引入这个泛型啊。他的这个文件。第一个问题啊,范想。然后呢,再把这个基础的代码。列出来。
01:00
好之后呢,我们再提一个需求啊好了,泛型。嗯,什么是泛型呢?应该说在定义函数。或者是接口或者说类的时候,不能预先确定要使用的数据的类型。而是在使用函数或者说接口或者说类的时候干嘛呢才能确定。这个数据的类型,这个时候我们就会用到泛型,比如提一个需求啊。说定义一个函数,然后呢,传入两个参数。然后呢,第一个参数。是数据。第二个参数是数量,然后呢,函数的作用就是什么呢?根据数量产生对应个数的数据,然后呢,存放在一个数组中。
02:16
啊,按照这个需求呢,我们先把这个含义定函数定义出来。好,来上一个方,小括号,大括号。那这个名字呢?咱们就写个get a吧。然后呢,在这个里边,首先呢,它应该有一个数据,一共有两个参数嘛,第一个数据呢,比如说我给他来一个什么呢,来一个这个,呃,这个东西。Number,再给他来一个数量count,那这个东西呢,咱们也给他一个number类型,那返回来的呢。应该是一个数组是吧,那这个数组是什么类型的呢?比如说我这个数据都存的是number类型,那我这块就写个number。
03:00
是吧,好注意啊,我把这个那么给它改,改一个value吧,这样更合适一些啊。这里边做什么事情呢?应该是根据数据和数量产生一个数组是吧?那我首先是不是应该有一个数吧,比如说cos的A哈,等于,那这块应该是一个类型,然后应该是一个中括号,然后呢,等于空,这是一个空数组是吧?那由于我现在的这个写法来看的话,这个数据啊,都是数字类型上,所以说要放在数组里边,这个数组的类型应该也是number类型。然后紧接着啊,注意了,这块应该是冒号啊。好,紧接着呢,我应该去循环遍历,并且把数据放在数值里边去,对吧,最后呢,应该return AR,这就可以了,好在这里边来一个for循环,Light I等于零,I呢小于这个count。然后A加加。好,那无非就是ar.push把当前这个Y流给它存进去是吧?好,那现在我们来看啊,当我去调用这个函数的时候,那必然给我返回来一个数组吧,是不是?所以说我来一个Co的AR等于。
04:13
什么呢啊,它应该是一个get a去调用,调用完了之后呢,往里边存数据,比如说我存个100.123吧。逗号,然后再传入一个三。注意啊,cons.log括号A,我来输出这个数据,我们来一起看一下。啊,这个时候有100.123,一共有三个数据,没有问题吧,是吧?哎,这个count就是相当于说我的数组的长度了,然后数组里边有什么数据呢?那就看你传入什么数据,那我传的是100.123,那这样呢,数组的长度是三个里边有三个这样的数据是吧?好,没有问题,但是现在呢,我又来需求了。我还是定义一个函数同上,只不过传入的是字符串类型,那现在来看的话,如果说我写个Co的A2等于get a r括号,我来一个ABC,然后呢,再来一个三,现在来看就不行了,为啥呢?我们鼠标放在这。
05:16
这是一个字串的数据是吧,而这个位置它的第一个参数是一个数字,所以说现在来看的话,调用这个函数已经不合适了,是不是我给它起名叫一啊,这个也是一,那怎么办呢?我只能把这个函数再复制一份。放在这儿来啊。那这个位置的话,我就给它起个二,这个名字呢,也是二,然后这个位置我就只能给它来一个什么呢?String类型,那我返回来的应该是一个字符串的速度是不是,所以说这都需要改一下对吧?好改完之后了,然后我们再来看啊canl.log括号A2。保存一下,我们再来看这个数据。OK,也是三个字串的数据是吧,好,现在呢,我的需求又改了,我希望什么呢,可以传入。
06:05
任意。类型的这个数据是吧,然后呢,返回来的是存储这个任意类型数据的这个数组。那所以说呢,现在上边第一的两个函数,其实呢,只要需求一改,那这个函数就废掉了,不能用是吧?那没有办法了,这两个函数都不能用了,而且我这个,尤其是第三个这个需求一出来之后啊,这是需求,那就说明前面两个函数不行是吧?那我就复制一份怎么办呢?同学可能会想到啊,那我就不用number呗,我用any呗any呗是吧,那数据的类型是any类型,然后呢,数组也是它。哎,这个数组呢,也是它是吧,然后呢,这个时候我们再来看啊。我这块有个AR1是吧,我把它再复制一份,这个是A2啊,它也复制一份,这个也是AR2,那这块呢,还是当前这个名字啊,就是get AR,咱们给他改个名字叫三吧。
07:08
好,那我上边这个是数字,下边我传的是字串。ABC。保存一下,我们来看结果可不可以啊。诶,可以是吧,结果和我之前结果是一样的,这样来看的话,我第三个函数要把前要比前两个函数它的这个功能性更强些是吧,好,这个时候呢,我的需求改一下是吧,既然说AR1中存储的是什么呢?数字类型的这个数据是吧?然后AR2中存储的是什么呢?字符串类型的这个数据。那我就想我可不可以这么做啊,cancel.log括号让A里边的第一个数据点to fix。大家看啊,现在没有任何智能提示了是吧?Fixed我想保留保留两位有效小数。
08:06
是吧,现在问题是什么呢?没有任何的这个智能提示的信息。是吧,哎,要么有这个什么呢,方法名字的这种提示信息,就是要么有什么呢,错误的提示信息,现在都没有。很明显,为啥呢?因为这个AR它本身是any类型。我更希望他能够给我提示,这个A里边存的数据应该是number类型会更好一些,是不是再看?can.log括号AR2里边也是第零个啊,下标为零的第一个数据,第二我希望来一个什么呢?Split split。调一下这个方法是吧,那现在呢,我们也能够看得到,注意看啊,我再去点一下点SPT是不是根本就没有提示吧,没有这个提示啊,他也没有这个提示,比如说呢,我这块写个空范啊,这个时候也是没有任何的提示信息。
09:06
那TS里边这种情况的话还是比较常见,但是呢,这种情况又不是我们经常要遇到的,我们经常应该遇到的是应该有提示信息是吧,或者说有正确的,或者说有错误的是吧,我们先编译一下,然后看一下结果。我们可以看到啊,这是100.12,这是一个数组,把ABC给它截了也正常是吧,但是感觉还并不是。很好是吧,要是如果能够说很确切的知道我这个A1是什么类型,A2里边是什么类型,那就更好了,是吧,这个时候以上的这些代码就都不是特别合适了。是吧,好。怎么办呢?我需要用到这个函数,给它改个名叫四啊。我需要用到这个函数。这个应该是几呢?这个是一二啊,上面都注释掉了是吧,好。我需要用到这个函数,但是呢,我能很明确我要往里边传的数据是什么类型。比如我第一次调用传的是数字,第二次调用传的是字符串,接下来呢,我这个位置一写出来之后,很明确,这个数据应该是数字类型的,下边这个数据应该是字符串类型的。
10:09
现在就涉及到这个问题了,说在定义函数或者接口或者类的时候,不能预先确定要使用的数据类型是什么,也就说我现在大家能够看得到的是什么呢?我们现在大家可以看得到是我这个位置传的是数字,这个位置传的是字串,那将来我还有可能传波类型是吧,传对象,传类等等等,传其他类型数据,我就是不能在定义这个函数的时候,能够确定当前我要用到的数据类型是什么类型是吧?这种情况我们就可以用到什么呢,反型。就可以用到这个发型了啊啊,那怎么改呢?很简单,只需要在这个函数的名字后边写上一个间括号里边写个P啊,当然说我写个F,或者说我写个P,写个O啥啥都可以,那我么写T是为什么呢?啊,写T的目的在于理解这个词,可以认为是type,就是类型,它的这个首字母就是T吧,是吧,好,这个位置给它改成T。
11:01
这样呢,我们把下边这些代码啊,先都给它注释掉。比如说我在这个位置cost a1等于get a4。然后呢,我写上一个间括号,注意看啊,如果说我需要往里边传入数字类型的数据,那我就写个number,相当于说这个number给了这个T,那这个函数里边存的这个数,这个类型就相当于是什么呢number类型了,好接着改啊,这块不能再是any了,这块应该是什么呢?T。那返回来的数据的数组是吧,它应该也是T类型的,那这个时候呢,这个位置我们也可以给它改成什么呢?T的形式。能看到吧,或者说我的这个位置可以这么改。Co a r,然后冒号里边是ay,先括号,然后写个T。啊,这样也可以啊,这样也可以好,那现在呢,比如说我已经改完了啊,已经改完了,这边呢,暂时没有写什么任何内容啊来看一下。把它删掉。
12:00
Get a4,然后呢,这个里边我比如说写的是一个number类型,好当我写小括号的时候,我们来看上面就有提示了,说这个value呢,就是number类型是吧,我删掉它。我比如说写了一个string,好再写小框,大家再来看一下,那这个Y流就是什么呢?String类型的,而且包括它的返回值是吧,这个类型非常明确,好现在呢,我先给它改成number,咱们来看一下啊number我里边比如说传入一个什么呢?200.12345吧,然后呢,我要来五个数据是不是好,那这个函数这个位置就已经搞定了是吧?好,这个位置为什么报错呢?必须得初始化嘛,是吧?哎,那初始化的话,那我就先给他一个空数组吧,是吧,这也可以吧,好。继续啊,我呢,再来一个count AR等于get a4,比如说给它来一个字符串类型的A。括号,那我们里边比如说我传入一个数字,传输一个五行不行不行,然后我们看123报错了吧,说诶你这个number类型参数不能复制给类型string的参数,比如说此时人家里边的这个参数啊,应该是什么呢?应该是这个字符串类型的,大家看到了吗?第一个参数的数据类型是字符串是吧?所以说这个位置给它改一下啊,一会来一个什么呢。
13:12
嗯,ABCDEFFG好搞定,那然后呢,我们再去canl.log括号是吧A,再canl.log括号A2是吧,好保存一下,我们再来看一下这个效果。好,OK,里面有对应的数据是吧,也没有问题,那当然了,如果说此时我这两行代码我就不要了啊,如果说此时我按照下面这个操作啊,看can.log括号A1里边所以为零的第一个数据。点我们一点来看啊,有没有图fix的这个提示呢?是有的是吧,我希望保留三位小数没有问题,再比如说我canl.log括号AR2中括号零,然后点。什么呢?Split大家看也有这个提示是吧,说明我前面的数据应该是什么呢?字串类型的,大家可以看一下,A2是字串,那我的A1呢是number类型的是吧,没有问题。
14:10
保存一下,然后我们再看一下这个效果。大家可以看一下,很明显保留三位小数,然后呢,字串都被截取了,对吧?好,这个方式用到的就是泛型,然后泛型的这个语法就是间括号里边写上对应的这个一个大写字母啊。我们先把它停一下啊。
我来说两句