00:01
好,刚刚我们演示了一下这个TS当中的一些基本语法,当然主要是这个类型的声明,其实你看到这儿的话,你应该会觉得TS语法其实不难,整体上其实就是在那个GS的框架上进行了一些哎,修改啊,或者改进啊,或者叫增也好,所以叫做TGS的超级嘛,哎,就是在他基础上做了一个这个扩展,你也可以直接就给他理解成就是一个GS,一个升级版,那么刚才的话,通过刚才的学习,我们已经知道了,知道什么呢?哎,我们可以给变量,哎做这个类型声明,也可以给这个行参,哎,这个参数,还有这个返回值做这个类型声明,那我们看见的类型的话,我们主要演示了三种,一个是number,一个是string,还有一个是我们的哎,Bully,那么在我们的这个TS里还能用到其他什么类型呢?哎,那这块的话,其实我们在下边给你们列出来了,还有这么多类型,那这些。
01:01
类型的话,其实也都属于一些基本的类型啊,基本类型他们可以最后的话可以去诶复合去使用,可以让我们这个情况变得更加的复杂,但是别着急,我们还是一个一个来看,那我们就不废话了,直接用代码来说话,在这儿我们新建一个新的TS文件,我们来一个0303我们叫什么呢?我们就叫一个type,哎,我们来说一下它的一个类型,那么这个时候我们刚我们看到了啊,我们声命变量我可以写什么呢?我可以写这个哎,Number对吧,可以写这个哎,Bully啊对吧,也可以写什么呀,也可以写这个哎,String这些都是我们可以用的这个哎类型。那么除此之外的话,其实我们还可怎么办呢?我们可以直接使用字面量进行类型生命。哎,我们也可以什么呢?我们也可以直接使用这个字面量。进行这个类型声明,谁要字面量呢?哎,很简单,我来一个A,我写一个十,那这个十就表示的是一个我们这个A的类型,那这是一个什么效果,这就意味着你这个A赋值十有没有问题呢?没有问题,你说来一个A等于11 11就报错了,11就不行了,为什么你已经指它的类型,它的值就是十了,这个时候你就不能再去修改它了,这就是我们字面量进行这个类型声命的一个作用,那这个时候其实你会发现,如果我这么写的话,把这个字面量整的有点像这个,有点像这个常量似的,对吧,就复制一次,就不能再去修改了,就只能复制这个值了,确实有点那个意思啊,确实有点那个意思,所以这种字面量的话,一般要这种用法的话,我们也很少去,很少去使用,或者一般其实你要这么用的话,一般都一般都不用啊,不用那你说老师这有啥用啊,其实这种的。
02:59
的话,我们要用的时候,一般的话,我们可以怎么用呢?我们可以这样用啊,我赖的一个BB的值呢,是一个是一个十,B的值是一个十,如果这么写的话,还是那句话,就只能是限制它的值是十了,你也可以写哈哈,也是字面量嘛,对吧,就限制了它的值就只能是哈了啊哈了那。
03:20
怎么用呢?其实我们可以干嘛呢,比如说我这直接写一个mail。Male,诶,一个字符串是一个难,后边呢,我可以跟着一个竖带啊,竖线,然后来什么呢?来一个这个false啊,False这个竖线表示什么意思呢?这个竖线就表示的是一个或的意思,哎,啥意思呢?就是这个值或这个值,那这样整完了以后,就导致我们这个B可以赋值,赋值成什么呢?可以赋值成ma,哎,也可以B等,诶写一个false,谁写的female对吧?女吗?诶,B等于一个female female,这都没问题,但你说我来一个B等于hello啊,那对不起哈,就不行了,为什么?因为hello是不是不在这个两个值的范围内啊,所以在这个竖线叫什么呢?叫做或的意思啊,叫做或,就是你或者是ma,或者是female啊,Female,所以我们可以什么呢?我们可以使用我们这个竖线,哎,来什么呢?哎,来连接我们这个多个什么呢?类型啊,多个类型不仅是。
04:25
可以连接我们这个字面量啊,你说我这来一个light,一个C冒号,我们来一个这个玻璃或4G,那这个时候C你给他一个布尔值没问题,你来一个C等于哈,这样也没问题,就是两个值之间啊,或者是布尔值,或者是string哪个都行,这是竖线,其实就表示或的意思,那这种类型的话,其实我们叫做联合类型,联合类型。联合类型那什么意思呀,就是把我们这个,哎,这两个值,诶,两个类型连成一个类型啊,或者的意思啊或者意思,那这样的话,我们这字面量就有用了,有什么用啊,哎,就是我们可以限制我们这个变量在某几个值之间,你现在这两个值,你写十个值一直竖下去也行啊,一直输下也行,所以这个呢是我们说的一个字面量,但是整体来说,它的使用场景没有这些类型用的那么的广啊,一些特殊场景下,像这个选择了性别啊,这种的时候可以去用啊,就是只只在几个范围之内的啊,范围之内的好,那这个是我们说的字面量,下边一个类型呢,我们来看下边一个类型我们叫什么呀。
05:36
叫艾你,艾你啥意思呀?埃你就是随便啊,随便啥意思呢?来一看就明白了,Let一个D冒号一个埃你。哎,你来一个D等于十没问题,来一个D等于一个hello,哎,来一个D等于一个处,哎,你会发现这么写完了以后,是不是跟我们这个原生的GS就没啥区别了啊,没啥区别了啊,所以I表示什么意思呢?I表示的是我们这个任意类型,任意类型什么意思,就是啥都行啊啥都行可以什么呢?可以任意赋值啊,可以任意赋值,所以这个时候艾你实际上呢,它有个问题就是什么呢?诶设置埃尼后。
06:21
一个变量设置这个类型为I后,相当于什么呢?相当于对该变量。对该变量关闭了什么呢?关闭了我们这个TS的一个类型检测。啥意思,你现在这个D是不是类型是I你啊,OK,你设置为I以后,那么这个TS就不管你了,你爱咋咋地,你想干嘛你就干嘛,TS变器都不看你了,压根就不看你了,就等于关闭这个类型检测了,那当然注意啊,只是对这个变量,对别的变量不会诶那你说老师那这玩意儿不就变得跟GS一样吗?诶的确是如此,的确如此,所以这个玩意儿啊,用不用啊啊所以我们在开发中啊,所以在使用TS时,使用TS时我们不建议啊,不建议使用我们这个I尼类型,你用你用I尼以后,你跟你用GS有啥区别,没区别,没区别,那你还不如就直接去用这个GS,所以这个这种写法啊,不建议你去用啊,不建议你用,但是的话,这个的话还好,这种用法还好,最可怕的什么呢?你注意啊,如果我这个地这我不喜爱你,你现在我写上。
07:42
你啊,你直接放到这个变量,它可以显示这个类型,你看B的类型是I,你能给你显示出来,你说老师我不写I,我就直接写一个letd。我直接写一个letd,这时候你放上去,你看D的类型是什么,是不是也是I,哎,也是I,所以你看这我这赋值是不是也都行啊,哎,那我们刚才那种写法叫什么呢?叫显示的I,你这种写法呢,叫什么呢?叫隐示的爱你,也就是你声明一个变量,声明变量啊,注意啊,声明变量就是指声明的时候,你说老师我这声明又赋值了,那它就有类型了,就是指声明没赋值,声明变量如果什么呢?如果不指定我们这个类型不止类型,则我们这个变量会什么呢?哎,我们这个这么写吧,TS解析器。
08:30
会自动判断这个变量的类型为埃尼,这种就属于这个隐式的艾尼,隐式的艾尼,隐式的艾尼就是我们不是诚心设置的啊,我们不是成心设置的,不小心不知道他,你想解析析,他也判断不出来这个类型什么,他就给俺上一个什么呀,安上一个埃你了就凑合用着吧,是吧,凑凑合凑合来吧,大概是这样一个意思啊,大概这样一个意思,但是我们说了,这种情况我们要避免。
09:01
显示了艾你我们要避免,这种情况我们更要避免,那我们不是主动用的,他自己给我买上了,我们更要避免,所以你就记住了,就是爱你的话,不到万不得已的时候,不到你没辙的候干嘛呀,就是尽量别用啊,尽量别用,但是还是那句话啊,我们学习这个程序,学习语言,学习任何东西也好,千万别给他学死了,我们说建议不建议使用,但是不是说这东西绝对不能用,要不能用的话,他就不会设计这个东西了,他既然设计的就是可以用的,但是呃,不到万不得已的时候,还是尽量避免它,去使用它啊,避免使用它,那这个时候其实就连带着产生了一个问题。产生一个什么问题呢,实际上呢,我们在开发的时候呢。并不是说我每一个变量,我每一个值,它的类型都是确定的,毕竟我们的语言是以这个GS为基础的,是在GS基础上进行扩展的,GS本身变量没有类型,所以就导致。
10:05
有一些变量我们就是不知道它的类型,或者说是不确定它类型,那你说老师我不用I,你我还能用什么呢?哎,那这个时候如果这个变量的类型你不知道,那么OK,你可以不用I,你可以你可以用I啊,你可以用I,但是其实我们还有一个选择叫什么呢?Light,我们直接来一个这个E啊,EABCDE啊,来一个冒号,我们叫做一个no。I know什么意思?I know叫未知。No设置,哎,No也是什么呢?哎表示我们这个未知类型的值。未知类型的值,那你说老师这跟那个I有啥区别吗?其实我们这看啊,你看我等一个十。等于十没问题,等于一个什么呢?等于一个哈,没问题,诶等于什么呢?等于一个处也没问题,诶你会发现当我设置完no的话,跟我们设置这个I。
11:05
效果是不是一样的呀?诶一样的,那你说老师这这这有啥区别吗。注意啊,你看I你啊看埃,我上边有一个变量CC的类型是,哎,别看C了,咱们整一个吧,我直接在这儿,我创建一个light,我来一个SS的类型呢,是string字符串,我这直接来一个啊,来一个S等于一个D。你看啊,这什么意思,我是不是把一个变量D的值赋值给这个变量S呀,你看S是string d呢是I,我这没写啊,因为没写它默认不就是I嘛,对吧,没写就是ID的类型是I,也就是当我把一个I类型的值赋值给一个这个字符串的时候。可不可以付,可以付是不是没有任何错误的提示啊,所以注意啊,D的类型是I你是I你。
12:04
它可以什么呢?它可以赋值给我们这个任意变量,不会报错啊,不会报错,换句话说,埃尼类型的变量,他不仅霍霍自己,他还干什么玩意儿,还霍别人,你这4S本来是字符串,你咔我这一整整一个什么呀,整一个出布尔直去了,那这个时候。是不是不仅它的类型检查给关了,把别人的类型检查也给关了,这S的类型是不是也就出问题了,哎,也就出问题了,所以这就是艾的一个不好的地方,这也是一个为什么不让你用安妮的一个原因,就是你用安妮以后,不仅是影响他自己,连带着谁站他边谁就完,谁跟他边谁就完,所以这个东西非常的不好啊,非常不好,但是啊,No就不一样了啊,No就不一样了啊,No什么效果啊,No的话你看啊,我来一个E等于一个哈等于哈,现在E的值就是一个自由串,E的值就是自由串啊,然后来一个S等于E。
13:06
S等于一,你看啊,E的值就是字符串,S的类型呢,也是4STRING,按道理说我这如果直接写的是S等于哈喽,这是没有问题的,但是当我写了S等于E,它会给你出现一个黄,一个红线,又是这个红色的波浪线是吧?浪里个浪又来浪你了,那这个时候是为什么呀?你知老师这不是字符串吗?为什么他还报错啊,诶注意他看的不是字符串,不是这个值,他看的谁看的是这个变量,这个E的变量什么?这个E的变量的类型是俺弄也就是这个E的类型是未知的我们字符串的类型,什么S的类型是字符串,你把一个未知类型的变量的值赋值给string,这个时候它就会给你报错,给你报错啊,给你报错提示什么呀,叫什么呀,Type and not as not sable to type string啊to type string,所以这个就是安和这个no的区别,安的话。
14:06
就是你给别人赋值的时候,他也不查了,但是俺no呢,俺no他只霍霍自己,你自己爱负啥值负啥值,但是你如果想把俺no类型的变量的值赋值给别的类型的时候,这个时候它就会给你报错了,诶告诉你这不行啊,这不行,虽然编译能通过啊,但是它是是不是也是给你做出了一个提示啊,你记住啊,用G用这个TS时候,你只要看到这有红色波浪线,一定要处理,一定要处理,不你不处理,那这个时候它是不是就就没有意义了,哎,就没有意义了啊,这一定要处理,那你说老师这玩意儿。这玩意儿怎么处理啊,哎,怎么处理,处理方式有多种,我们先写上啊,我们先写上啊,No。KO。WN啊,WN写反了啊,按no按no的话,按no的话它是一个什么呢?它是一个啊,这是一个N。
15:03
啊no的话,实际上什么呢?实际上就是一个类型安全的I啊no类型的变量呢。And no类型的变量不能什么呢?不能直接赋值给其他变量。不能直接赋制给其他变量,因为你类型是有问题呢,那这时候怎么办?那你说了,我想把就想把这个E的值赋值这个变量S,那你赋值之前你需要先第一种方式,你就可以先对它做一个类型检查,If一个什么呀?哎,Type of e等等于string,如果它的值的类型是四俊,我在这儿再赋值,那这样你看还报不报错了,哎,就不报错了啊,就不报错了,为什么呀,因为我在这儿已经做了类型判断了,只有E的类型是死准的时候,他才会赋值,不是是不是就不复值,哎就可以了啊就可以了,做一个类型判断,你说老师这玩意多麻烦,确实麻烦,麻烦麻烦在哪麻烦你还得检查,之前我们G直接就付了,这还得检查,麻烦是麻烦,但是实际上它可以避免我们后边出问题啊,避免我分出问题,这个是一种使用方式,或者你说老师我觉得这样写麻烦,我还可以怎么写呢,我们还可以。
16:22
可以写一什么呢?在我们的这个TS里,还有一个我们叫做类型断言,啥意思呢?看着啊,我直接来一个e string ES string,这啥意思呢?哎,这个东西我们叫做类型断言。啥叫断言,断言就是就是叫什么呀,我们有一句话叫铁口直断是吧,什么张铁口网铁口什么呀,就说啊,你明天就完是吧,你后天就完,呃就是把这个事儿给你说的特别死叫断对吧?断言呢,就是一个哎判断的一个语言,就是一个判断语言什么意思,有一些时候有一些变量,这个类型呢,哎,我们的TS编译器他不知道,哎,但是我们自己知道,我们自己知道编译器不知道,像这个E这个类型是字符串,它它的类型它就是字符串,我们知道对不对,但是编译器不知道,所以你在这赋值的时候,他就给你报错了,那报错怎么办呀?哎,报错了我们得告诉编译器这个E呀。
17:21
他就是字符串,你别给我报错了,那我们就要用到什么呢?用到类型断言,我这儿来一个S一个字缀啥意思呀,就是告诉变音器,哎这大兄弟啊,他就是字五串,你就让他放心去用吧,是吧,放心用吧,这个时候是不是这个错也就不报了,哎就不报了,叫做类型断言,类型断言什么作用,它可以什么呢?哎,它可以用来。告诉我们这个解析器我们什么呢?哎,我们这个变量的这个实际类型啊,实际类型啊,就这么一个东西,当然你得写的是对的啊,你别说他是个数字,你咔你就直接来个艾string了,那没必要对吧?你写的你得去啊,你写的是对的叫做断言,断言这种写法可以或者还可以怎么写呢?S等于一个E,就是你后边写的是s string对吧?你说是字符串,那你就是s number啊,你是布尔值,你就S布林是什么,你就S什么就可以了啊,那你说还有什么写法呢?还可以在前面加一个尖块,我直接写一个string。
18:23
上边上下两个效果是一样的,都是表明告诉你我这个变量E是一个,哎,是一个字符串来写一下啊,它的一个语法,语法一共有两种,一种是我们变量。变量S一个类型或者是什么呢?或者是一个小三角啊肩块,诶这是一个类型,后边跟的是一个变量,两种用法都可以啊,两种用法都可以啊,两种法都可以好,那这个是我们说的一个这个类型断言,好刚才我们说了谁呀,说了这个I,还有这个安no,那总之当你遇到一个你类型不确定的变量的时候,哎,能用安no呢?尽量用安no啊能不用安妮呢?尽量不要用安妮,还是那句话。
19:12
不要看TS麻烦,不要看老师,多麻烦你多好。不要看这事儿,要嫌麻烦就用什么呀,别用这个TSTS这门语言的话,第一次接触肯定会觉得麻烦,但是他就像一个什么呀,像一个这个像一个老朋友一样,哎,老朋友一样,刚开始认识的时候可能觉得没那么好,但是TS这个人就是什么呀,哎,你咱们交着吧,是吧,哎,越交这朋友你会感觉他越好,越用越好是吧,谁用谁知道是吧,谁用谁知道好下边我们再看看啊,刚才说了,哎你说了啊,No还还有两个类型,一个叫VO,还有一个叫做哎never VO和never是干嘛的呢?Word和never这个东西啊,它其实呃我们在变量的倒是用的不多,诶它主要会用来谁呢?用来对我们这个设置我们这个函数的一个返回值,啥意思呢?
20:09
我们在设置这个函数返回值的时候啊,比如说我在这定一个方,我们叫做一个SNFN括号,我们可以设置什么呢?返回值的类型,我可以设置一个number。哎,Number我就直接return一个123就返回number了啊返回number了,那我这如果设置是一个玻璃呢,那我就可以return一个这个true就返回不,哎,对吧,这个是我们说这些类型,但是有一些情况下我们函数没有返回值,哎,但是我们先换过话来,如果老师我这不写呢。不写你们猜的。它的类型的自动判断或者什么,哎,注意了,只要你不写类型的动判断都是谁呢?都会是这个爱你。诶,当然啊,这一块因为我们设置返回值了,所以它判断出来了是bully了,对吧,判断出来是bully了,如果没写的话,我看他写的什么啊,那证明我们这什么呀,我们这个函数的这种类型自动判断还是比较的,这个比较聪明的比较聪明的,因为他现在看我没反应值是不是给我设置为word,哎,Word如果我这写了一个return一个这个,诶,Return一个true,那这个时候呢,我们再看就是一个类型,就是一个玻璃了,那这样写啊,我这来一个number,我这做一个判断,If number大于零大于零,我return一个这个哎处,然后呢,Else。
21:31
Else。Else,我return一个123。哎,我们做一小实验是吧,小实验看看到底返回什么,我们这一点过来,诶,这个时候它的类型是什么啊,你看类型就是处或123,所以这个时候证明我们这个GSTS这个编译器啊,还是很聪明的啊,它可以去根据你的返回值的情况来判断它这个类型啊,判断这个类型,所以这里边的话回到我们刚才那个话题啊,说点题外话,什么话题呢?就是在这儿我们可以去指定我们返回值类型,写number返回值就是number,写string返回值,String,你写string或number,那就是返回值是字符串或者是数字,但是还有一种情况就是我们的这个函数。
22:15
没有。范文之。不会返回结果你像aler的对吧,像像canl了log没有返回值,没有返回值怎么写,哎,在这我们可以直接写一个VOVO什么意思,就表示的是空。哎,Y,哎,用来什么呢?用来表示空,以函数为例,以函数为例,其实就表示什么呢?就表示没有反分之函数,没有返回值的一个函数,所以当你的类型设置为Y以后,我们这直接写一个RETURN123。报错了,我这如果直接写一个处就报错了,就是你返回以你只要有返回值,它就会报错了,所以你设置为Y,就表示说我这个函数压根就没有反问值,当然有一个例外,你可以直接就写一个return return后边不根值啊,不根值啊,那这样是可以的,或者你写一个return安范,但这么写有点神经病啊,神经病可以这么写,但是的话就这么一个意思,Word就表示是,哎,没有反问值,那你说安范行,我写个now行不行。
23:19
哎,Now null写个闹,哎,Now在这儿是不是也没有报错,哎,没有报错,所以这时候你返回now啊,返回any find在这个word,它这都认为是一个什么呢?认为是空,但是你就记住了,它表示的意思就是没有反问值,就是没有值的一个函数啊,没有反问值,所以这叫一个啊VO,那除了word以外的话,我们这还有一个。还有一个,还有一个值叫什么呢?叫做never never跟wa有点像,但是WHY呢?是空值,空值never呢叫没有之,啥叫没有纸。这个事很奇怪,我来设置一个function Fn Fn,我这来一个never never never就是永远都没有值,哎,Never neve never表示,哎,别叫FN了,FN2。
24:12
Never表示什么呢?表示永远不会返回结果,永远不会返回结果就是什么都没有啊,什么都没有,你说空不就是没有结果吗?为什么还有一个never啊?诶,注意了,空。这么一说吧,这就有点这个什么呀,有点这个这个哲学的味道了,是吧,我们读这个这个叫什么呀?叫这个心经是吧?哎,色即是空,空即是色啊,空其实也表示一种有你都你没有反位值,从一定意义上讲也是一种反位值,对吧,也是一种反位值,那never和他word不一样,你看never就是真的没有,连空都没有,就是什么都没有这种情况,哎,说的有点有有点这个可能大家不太好理解是吧?没关系,我们说一下举例子就明白,在我们的GS里啊,它有一种函数,有一种函数干嘛呢?它不返回结果。
25:11
那他是干嘛的?安连安迪find都不返回吗?哎,对,连安迪find都不返,那他干嘛呢?它是用来报错了,就是当我们,哎程序运行出错误了,出错误了我需要诶报一个错,报一个错的话,我们就可以用这种函数来完成报错,怎么报错呢?我们有一个叫做什么呀?哎肉我们直接来一个new a new ara来什么呢?诶这来一个报错了,也就是说你像我这个函数,这个函数我只要一调用,只要一调用它是不是就报错啊,那我们知道函数一旦报错了,程序一旦报错了,我们的代码是不是就立即结束了,立即结束还会有反应值吗?就没有返回值了,所以这种就叫做没有返回值的这个函数,所以这种函数我们就可以设置,为什么呢?Never,因为它永远都不会返回一个结果啊,永远都不返回结果,但是呢,这个东西相对来说会用的比较少啊,比较少了解一下知道一下这东西就行了啊好,回顾一下我们刚刚说的几个类型,我们直接看这儿吧,说什么呀?哎,说了,首先自变量自面量直接写就行了,当然我们可以用竖线联合类型,一个值隔一个值这样去写啊,联合类型I表示的是任意类型啥都行,但是这个东西很危险,慎用,你用了I,你以后不仅关闭自己的类型转换,别人的类型转换也给关了啊这么一个,然后I no叫未知啊,未知类型,那它其实就是一个类型安全的I啊,所以如果用的话,你不确定类型的话用I啊,不要用这个IY的表示,空的就是没有返回值的一个函数never表。
26:52
指的是没有值啊,没有值就是从来就是这函数压根就执行不完,这函数一定包括执行不完,这个时候就用这个never啊never好,这个是我们说的几种类型,我们还是呢,我们先停一下。
我来说两句