大家好,我是学学原地的特约讲师高洛峰。上节课我们学习了 ts 类型声明的基本语法,也就是我们用注解的方式,用类型注解的方式指定一个变量,限制他的类型进行类型检查和类型约束。 那我们重点要学习的就是 type scrap 的有哪些类型供我们去使用来进行类型的一些约束。 他的类型呢还是比较多的,那有一部分呢,是和我们家有碎块是相当于重叠的,因为他是家有碎块的,超级 加小碎块能用的类型他肯定都是能用的,比如说像数字类型,字物串类型,波尔类型,数组类型、对象类型,对吧?安底饭空类型,那这些呢,都是我们加小碎块给我们提供的类型。那 ts 在加小碎块的基础上,他又增加 加了很多类型,比如说像 interface 接口类型,像美举类型,范型等等,以及一些其他的应用的结构,比如说联合类型, 对吧?那这些呢,我们都会一一向大家讲解。那这节课呢,我们先来看一下和 gs 呃共用的,也就是 gs 里边支持一类型在 ts 里边怎么使用,那除了用法差不多之外,那我们最主要是用注解的方式对变量进行一些限制和检查去使用。 我们先来看数字类型,数字类型呢,在 type 啊, type squarter 和加入 sky 里边是一样的,都是不区分整形啊,符典型和双定度的。那统一呢?我们使用的是 number 类型来表示,像在扎瓦里边,强类型语言里边是将数字类型分为多个类型区 约束的,比如说分成整形啊,浮点型,浮点型就小数点后边有一位的,还有 double 双精度的,双精度呢,是小数点后边有多位的。那除了我们这里边有数字呃,就是分为不区分整数浮点型之外,那我们还可以怎么地? 还可以分为,这也跟加速块一样,分为二进制,八进制,呃,十进制和十六进制等等这样的一些类型,这样的一区分,那我们就看一下,我们新建一个文件, 新建一个呃, type scribe 的,我们叫做呆某零二点 ts 这样的一文件。 首先我们声明一个 num 一,让他是一个什么类型的,是一个用柱姐的方式 numbr, 当然了,你可以用推断的方式也是可以的,就是 这块不写注解,直接写类型的值,这是我们上节课说过的,直接写个一百,假如不写 number, 你能推断出他是整数类型,那我们这块用注解的方式加上所有的类型,一定要小写啊,如果大写的话就是累了,对吧?我们有 number 这个类的, 这块可以加空格,也可以不加空格。我们声明一个呃,十进制的一百 like num 二,我们还可以声明 啊,一个二进制的,二进制的呢,是使用零币开头的,二进制的范围是零一零一只有两个数吗?对吧?那我们也是幺零零,这个就不能独坐一百了, num three, num 三 numbr。 我们声明一个八进制的零欧开头的是八进制的,那八进制的范围是零到七 组成的八斤制,那我们幺零零也在零到七范围内。然后还有 am 呃,我们 siri 四, 那么也是给那么类型,我们声明一个十六禁止的,十六禁止使用零 x 开头,他的范围是零到九, a 到 f, 那一百也在这个范围内,我们都是用一百这个值。当然了,我们还可以,比如说再声明一个特殊的五, n u m b r, 声明一个,比如说呃零,咱们直接声明一个一百点,比如说八八这样的呃,双精度的这样类型他也是支持的。然后我们打印一下 log n u m 一, 复制一下,一二三四五 num 二, num 三, 你看我们使用上这个就变颜色,对吧?四五, 当然了,科学技术法也都是支持的。来,我们现在运行一下,有类类型限制了,那既然有类型限制了,我们就不能把它附上其他类型,比如说 aim 五,我们附上一个字物串,对吧? abc, 这样肯定是不行的,所以这样的语法是错误的, 约束了我们的类型只能是整数,附上这些纸是没问题的,其他类型的是不可以的啊。我们使用 ts 杠 nod no 的运行 src 下边的 demo, 零二点 ts, 你看整数的一百就是一百二进制的幺零零是四八四二幺嘛,对吧?然后呢?呃,你可以自己去换算, 然后八进制的幺零零是六十四十六进制的幺零零是二五六,那一百点八八这种双净度的还是一百二点八八,对不对?这就是我们数字类型比较简单,咱们快速的过一下, 再有波尔类型,波尔类型的使用就使用这个关键词去进行注解,我们再建一个文件, 新建一个 demo, 零三点 ts 这样的一个文件,声明波尔类型 like, 当然我们说也可以用类型推断,这也是咱们前面讲过的,对不对? black, 我们声明一个标记,那我们可以论形推断,直接写个真假值是可以的,当然了,我们这块也可以直接 使用这个,对吧?你可以直接用类,如果能推断出类型的话,直接用类型推断也是可以。 倍儿型真假,当然了,我们在复制的时候有几种方式去给他复杂,但是复制成字物串或者整数,这肯定是不对的,对吧?那我们只能复上倍儿型,倍儿型值只有真假两个值,对不对?直接给倍儿型值是可以的。然后再有或者是我们用调旧运算服, 布尔运算服运算的结果,比如说这里边我们给上啊,二十大于五,哎, 打一五,那计算完结果也是波行之,也是直接可以这样复制的。或者是我们比如说整形的一百用类型转换加个取反,这是波尔运算服取反的呢? 经过这个取反运算符运算,那一百整数呢?肯定就变成了假,对吧?变成假,然后我们再取反,就能把它变回什么?变回真纸。所以呢, 通过两个这个符号可以把其他类型转成波尔型值,复制也是一样的,相当于用逻辑运算服去给我们转换,然后我们这里边打印一下 flag 点 log 可以直接打印,可以直接用在呃,比如说循环里边呢,或者是调节运算里边都是可以的。呆猫零三迷信一下, 主要是看一下有没有错误,这是波儿类型值声明的方式,那我们再往下看,还有字物串类型,字物串呢,可以使用单眼号,双眼号,这都是没问题的。那单眼号,双眼号里边也可以有一些像转移字符啊,这些东西都是可以的,也可以使用这个反眼号做模板字物串, 都是可以的,在模板自助串里边还可以牵到变量,那这里边我们声明一下,再声明一个 ts 文件,叫做 dm 零四点 ts 这样的一个文件,然后我们声明一个字物串,比如说声明一个呃呃 one, 一个字物串 ston, 我们给上,比如说三 w light, 声明一个 dot, 然后给人自顾串,我们给上一个呃点,我们可以用双引号,这也是可以的点,比如说我们再声明一个 light, 嗯, three two 吧, 给个自助算,我们可以用什么?你看我们可以给上值,当然了,我们直接这样推断也是可以的啊,就是前边不写这个注减的方式,比如说一滴油 work, 可以的,然后比如说 lights read strng, 我们可以用上模板自助串,就是旁边一旁边的反眼号,这是模板自助串,完美自助串,比如说我们可以加上 https, htbs 冒号斜盖,然后呢这里边我们加上模板字母串,用刀了符,刀了符,然后呢用大括号,这里边比如说写成万,然后呢再连接一个变量 道路符,大括号,然后里边比如说 dot 点,然后再连接一个大括号,比如说 一个面料是 two, 然后呢再连接一个,可以使用多个便的多次吗?比如 dot 这个点点,然后呢先,你看这样的话,我们就类似一个域名,我们就出来了,对吧? 一个 ur 网址,然后 t, 我们打印一下点 lg, 在这里边运行一下。四,我们打印字物串,就出现了一个网址,看到了吧?这就是字物串的一个应用,那我们再往下看 数组,那数组呢?在我们 gs 里边弱类型限制的时候,我们先见一下这个文件啊。 demo 零五点 ts 数足,我们平时在声明的时候,比如声明一个 a r 等于 这样的一个数组,那这样的话,其实就是我们声明了一个空数组,但这个数组里边我们可以附上任何类型的纸,可以附上类任何类型的纸,比如说 ar 点 puss, 我们可以 可以在里边加上租串 abc, 这是可以的,对吧? air 点 push, 我们可以在里边加上整数,这是行的,这是我们呃, gs 传统数组的,对吧? air 点 lg, 我们之间打一下看一下。五, 你看数组里边,这是我们做 ts 文件,这是没有限制的,这是我们原生 gs 使用的。 那对于 ts 里边,我们限制数组和其他强类性员,因为毕竟我们做类型一些约束嘛,和其他强类型员比的话,我们一定要限制数组的类型, 也就是在同一个数组里边,我们保存多种类型的数据,基本上用途不大的,都要限制在一个数组里边,是自务串,数组就全保存的是自务串,是整形数 就全保存,整形是这样的,那有两种限制方式,你比如说现在这样整形组串,对吧?那一种呢?是在这个地方, 如果我限制自助串的加自助串,那这有说了,这不是就自助串的方式吗?我后边再加上一个中括号,那就证明我们声明的是自负串数组,那也就意味着我们里边放自助串可以, 比如说二三,但是呢,我们放其他类型的数据就不可以了,这个数据就出错了,看到了吧?包括在我们编写代码的时候是不允许的,那我们在运行的时候呢,当然也是不允许的, 如果我们把这个注视掉,严格按照他的类型约束去执行的话,就没问题了。看一下,你看 abcabc 二 abc 三 这样的,这是一种声明的方式,还有一种声明的方式是这样,比如艾特哎啊二, 声明的什么用饭型,这个呢?我后边我们学饭型的时候呢,会详细的说,比如声明 a r r a y, 通过它后边指定一个饭型,是一个字母菜类型的一个数组,或者是 number n u r n b r number 的速度都是可以的啊,然后声明一个空数组,用饭型的方式去声明,那证明。 但是这我就不详细解释了,等我们学完发型的时候回过来我再给你说一下他的意义啊。你只要记着数组,然后我们通过监管号里边指定什么类型, 那我们就限制了这个数组是什么类型的数组。建议使用上面的方式去生命,我们在 tst 里边通常都使用上面这份方式,生命只是有这样的一个格式,是可以这样去做的。那这个 a r 二点 我们再往里边放数据的时候,那我们放一个自助菜, abc 肯定就不行了,但是我们放数字,一,你看二三,这是没问题的。然后 air 二点 lungelog, 打印一下 dom 零五,那一二三是没问题的。可以通过这种方式声明,也可以通过这种方式声明, 你可以是任意类型的一个数组,只要后边加中号,建议大家用这种方式,这是呃,数组类型,当然了我们还有对象类型,对象呢是我们一个重点,那不一定呢,我们这在这个里边去 啊讲解,因为他对象涉及到的东西是太多了,那我们后边还得有泪,有接口等等,那这里边就简单给大家用一下,比如说我们在声明一个,呃,声明 一个什么用户吧,用户信息我们可以直接通过类型推断的方式,这里边比如说名字是啊, edu work, 对吧?当然了,这阶层里边的格式,然后呢啊,我们假如说有个年龄 五岁,得用整形五岁,这样是可以的,那这样的话,在 ts 里声明的和我们 gs 里边声明的感觉就差不多了,对吧?然后我们 us 点内这个对象,我们就可以打印出来这个值看一下, 你看一丢沃可就可以了,这样可以,那我们还可以强制的标注一下,比如 object, 他是有这样的类型的,但有这样类型呢,我们比如说约束了,这是一个对象。当然后期 我们是用内容接口的方式去约束的啊,语法有很多,这里只是简单说一下,你是可以这么去标注,对吧?用注解的方式限制我们后边的只能复制对象,但是有一点,这里边呢,我们就不能打印了, 就不能打印了,因为这个对象是空的,空的约束的时候呢,约束的时候这里边是没有内幕的,所以我们按这类型约束是不行的,后期呢,我们单独自己定义的类自己的对象,这么去约束就可以了。用接口,所以这里边暂时先了解一下。所以打印的时候你是打印不出来的 呀,刚才那块是会有一个错误啊,在这个位置会告诉我们什么属性内幕是不存在的?在 oppo 这个里边, oppo 这个里边没于因为本身里边 他没有声明过内幕,对吧?所以呢他是不存在的,但是有这个可以这么简单了解一下, 这就是我们这节课要讲的和 gs 对应的一些基础的。呃,类型,当然了,还有像空啊、安吉范的这些有很多啊,那咱们这节课先介绍这几个。
粉丝3968获赞1.8万

各位好,那这节课呢,我们来聊一聊这个泰博士可乐编程中的一个生命文件的问题啊, 所谓的生命文件,其实我从我们的这个主题来讲呢,我们可以看到它的作用主要是什么,就是可以提高我们的编程的效率,然后呢进行一些错误的类型检查。那么我们来看一下这个用假药这个内容的介绍啊, 这内容呢我们主要就是说声明文件,他可以为我们的这个健壮代码的一个编写呢,可以保驾护航了。那么首先我们在这里面要了解一下呢,就是我们 传统的这种家务式亏本代码中,我们是怎么来使用这种 gs 的,那同时呢,我们了解一下 ts 中所谓的 这个声明是干嘛的?那我们首先来介绍一下,要了解的就是在 ts 中声明一个函数是怎么来实现的,接着我们会讲一下就是一些这个声明文件啊,就是有很多声明文件,我们是 这些实名文件呢,都是针对我们原来的就是传统的这种 gs 库啊,在以前呢,由由于没有出现这种 gs 的变成语言,我们都是按照原始的方式来使用这 gs, 那么我们为了在新的编程环境下使用这个 gs, 我们怎么来使用?那就要通过一种生命文件的方式来使用,那么这里面呢,我们会简单的了解到一个,就是说怎么来编写自己的一个生命文件,就是为我们的代码来提供一个 计时性的一个检测,对吧?我们知道我这个原来的 gs 呢,它是一种嗯非类型,就是非强态类,强制类, 强制类型的一个语言,有些代码在编程过程中的错误呢,我们不能及时发现,只有在运营时呢我们才能发现,那有了 ts 之后,我们就可以 用这种方式来检查到我们的编码中出现的一个错误,及早的发现不会在运行时导致系统的一个崩溃。当然了还有更多的一个内容呢,我们希望是在我们的一个专栏里面可以详细的了解, 那么这里面呢,我们就来开始的了解一下啊,为什么需要这个生命环节,对吧?在天是变成的时候,我们往往要使用到一些成熟的,就是传统的这种遗留的加坡石盔的这种库 很多的,对吧?比如杰克呀,葡萄太派呀等等很多的,那么我们想利用这些已有酷的一个特性相关类型的时候,那么我们怎么样来在 ts 编程的过程中来使用呢?这就是我们要解决的一个问题。 那同时呢,我们通过获取这边意识类型检测这个提示呢,就是有了这个声明文件,我们可以获取这个边意识的类型检测提示,就说你有没有错误,这个类型该不该怎么用,或者这个类型中什么参数有没有满足,对吧?还有我们利用 这个 id, 也就是我们比如说我们的维修十九九这扣的这个编程工具,他给我们的一些这个快捷高效的提示,以提高我们的代码的一个健壮性,为什么我们需要这样一个声明文件,就是这样的一个目的 所在。那么我们这里面呢,首先来简单看一下啊,我们打开我们的编辑工具,来看一下我们传统的 gs 使用的一个模式, 那么我们在里面来看一下我们的通过我们的一个视力啊,我打开我们这样一个微九九扣的这个工具。我们传统的比如说我们自己有这样的一个买来的这样一个库啊,我们这里面就简单的写这个库,里面就包括这样一个函数, 休息服卖起这样一个内容。那么我们这内容里面呢,我们这个凡的这样一个参数,那从参数的实验形式上我们可以看到啊, 这个参数呢,它里面是有这样一个这段属性的副内蒙这样一个属性,对吧?那我们在这里面,如果我啊,我在这里面有了这样一个库,我第三我自己编写的 这个是什么库呢?比如说我自己编写的一个叫 mats, 我要引用这个,要引用这个库里面的一个函数,也就是修卖我怎么用?那我在这里面我是这样定义的, 就是我先定一个烦的这样一个对象啊,这是一个结实对象啊,我们直接把它传给他,那这个参数是满足我们库里面这函数的要求的。那我们在这里面知道,我们在传统的这个解压式库的引用过程中呢,我们必须在这个页面里,比如我们这里面 创建了一个印代克式的 ht 庙,我们是怎么来引用这个库的啊?这就是我们第一步要把第三方库我们自己定的,比如说我们在定义的是迈拉宝在 gs 的库啊,在这一个地方给引进来,那在里面呢,我想在这页面的主体部位,也就是包地这里 这个元素管理,我想让他输出一个信息,我们知道这个输出信息其实很简单,只是调用我们的 gs 刀刀个对象来写一个写,写一个字不算啊,就写一个字不算这么简单,就写个这种东西, 这个人或者烦的这个姓名给写出来,那么我们在这里面可以看到这样,这里面呢,这里面虽然我们在卖这个 gs 里面,我们并没有定义一个函数题就是修的,因为为什么我们没有定义我们 他会自动,因为我们在这个 gs 里面引入了这个库,他会自动找到我们这库里面的同名的相同参数的这个函数,那就会自用自动的来使用。那么这里面我们简单的来看一下啊,我们看什么呢?就是说我们看看这个页面他会得出一个什么样的一个效果? 比如说我们打开浏览器啊,我在这里面是这样一个浏览器,我们来 刷新一下,刷新一下这个页面他就会输出这样的一个内容啊,这里面就是我们页面里面那个内容,对吧?这是我们调用的,这是他使用的,这就是我们传统的一个调用的模式, 对吧?那我们现在用了这个他不吃亏不?这个编程的一个工具,那我们就不能用,不想用这种方式了,我想接就和我们的天使来写这种怎么怎么来写,这个时候我们就 要注意到了,那么我们现在可以创建一个什么呢?我们创建一个 ts 的啊, ts 文件,这里面呢,我们开始的时候啊,比如说我们开始的时候是这么写的,那这里面我这个不要, 我就是认为写调用我们第三方库的一个函数,那这里面他会提示我们什么?我们这里面的如果你想直接用用他的这样的一个内容, 我们可以直接这么调用,但是调用呢?在里面他会告诉我们一个什么呀?告诉我们这个方法不能找到这个名名字的去修或者这样一个方法,那你要想找到呢?你必须要事先声明, 这就是我们讲的啊,在我们这里面我们知道了一个传统的这个钓鱼方式叶面林怎么使用,那么我们在这 他本是捆绑中编程,如果你想想消除这种声明计时检测的一个错误,我们必须要声明这个函数,这个函数怎么声明?我们用关键字递给了方 某个函数,哈,在里面是这种基本的模式啊,这里面声明呢,我们是返回一个空的,也就是没有返回词的, 那么我们看在我们的 ts 总编程是如何实现这样的一个操作?我们在现在在这里面有这样一个错误,对吧?那么我想消除这个错误,你首先可以定义通过接口的方式啊,定义这个参数, 就说我这个修里面修理货里面这个参数是一个什么类型的,对吧?我们定义这样一个类型就是不然的这次我们前面讲过,这只是个参数的规范,参数约定 规规约了啊,这个就是给我们提供的规则了。那么接下来我们要想不让他报这个错误,我们怎么做? 你看我们就加上这个迪克莱这样的一个内容啊,这个这个内容是另外的,我们不用管他,在这里面我们声明之后啊,这个时候我们再来写这个程序呢,他就是正常的这个,这么像这样的一个写, 就是第一个呢,是什么?就是咱们电影这边一个规约,然后呢我们来声明这样的一个的可乐,就是对这函数进行一个声明,引用的一个声明,那接着呢,我会传递一个参数类型, 然后再调整这样一个方法,这样我们的这个对外部库的函数的一个引用声明就完成了。那这个时候呢,我们要想实现这个库的一个正常的使用,我们就可以通过编译,怎么编译呢?我们就是 我这个命令 ts 来变异,我们的这个天使文件 tsc 命令啊,天使变异器来调用命令来咨询我们的这样一个变异工作,然后呢他会输出我们想要的传统的 gs 代码, 我们可以自己来执行一下,执行之后呢我们会看到他输出的一个结果,输出的一个结果,对吧?然后呢我们这时候看到这就是输出的,我们通过 ts 的方式 那写的,那这个时候我们钓基本上就可以确定我们这个函数的钓用是正确无误的,他是满足我们要求的, 对吧?如果你在这个时候,在失眠的时候,你说这个你团结的不是这样一个参数,我们把这个里面改一个名字,我们随便加一下,那这个时候 他就会报你这个参数调用是错误的,因为我们这里面是没有这函数函数呢,他是不含这样的一个自断属性的, 所以说这个是这就是我们讲的通过这个函数的声明对外部记三分库的一个声明,我们就是等一个函数计时变异错误的一个检测,那就可以保证我们代码的间状性,不会导致运行时出现错误,因为运行时再出现错误已经来不及了,那可能导致我们整个系统的一个崩溃, 所以说这就是我们进行一个函数声明,尤其是对外部函数引用的一个声明的一个这个 关键性就是它的作用了。好,这就是我们讲的这样一个函数的声明,这个呢我们现在这样一个库呢,我们写的是比较简单的,为了做 一个势力性的说明,那其他的库呢?也是一样。好,这就是我们通过这种引入函数说明的方式,说明的方式来消除我们的计时代码中的一个错误类型引用的一个错误。那接着呢,我们我们 传统有很多这种第三方库呀,那这种库我们是不是都要安装一个说明文件的?其实是可以的,有很多库,尤其是一些这个成熟的第三方 gs 库,他都是有这个类型文件,也就 我们讲的这个声明文件的这个 npm, 也就是录的包管理器来安装,比如说我在这里面可以通过命令行业可以安装一个录带这样的一个类型文件,声明文件 通过这个保存作为一个拳击来使用,或者说呢,你有自己想要的,在开发过程中有自己想要的这个 生命文件,酷的一个生命文件,那你可以到这里面来找到这个网址上来找啊,找到自己喜欢的这个 的一个安装文件,然后呢按照这种面料的方式来进行一个安装,它上面有这个官网上呢会有一个说明的,也可以自己裁着,比较容易使用的,比较容易使用,那这就是我们说对 传统遗留的这种库的一个生命文件的安装,同时呢,我们如果想自己编写一个内裤文件呢,想编写自己的内内裤的一个生命文件呢,也是可以的,我们因为这个 ts 完全支持这样的一个操作,那这个要想完成这本这份工作呢, 我们需要注意的是什么?就是在我们用 v 十九九扣的这个编程工具的时候,我们通过命令行来生成,这个一定要生成的一个是配置文件,就是 ts 可非一个结实这个这里面他默认生成的内容很多,默认生成的很很多, 像这个呢,默认他都是不开启不启用的。那么我们在这里面呢,我们要想实现我们自定义的这样一个声明文件啊,我必须把这一项啊,就尤其是这一项,迪克拉这一项啊给提供了,提供的时候我们在变异 ts 文件针,嗯, gs 文件时,他就会自动生成一个什么,就是带一个带点 d 的点 gs 的战友 ts 的战 一个文件,也就是类型文件,那么我们就可以通过这种方式呢,提供一个即时变异的一个支持,就是类型错误检测的一个支持。那当然了,还有很多其他进一步的消息呢信息呢,我们可以到我们这样一个专栏力来了解一下,专栏力。

哈喽,各位观众朋友们大家好,今天我们来学习这个泰普斯,会不会这个第十八章生命文件啊,也就是这个地点 ts 啊,和这个 dk 六的这个关键词, ok, 上面首先每天是创建一个这个 ps, ok, 让我们来装一个第三方的模块包,比如说我们要用这个一个 prise, 我们就给他杠 s 了,就是杠杠 see, 简写, ok, 然后为了把对比这个差异化呢,再来装一个这个 x, yeah, ok, 让我们去引一下这个 x, 比如说我们想调 xo 上面一些方法 或者是属性,你通过 x 点这个,比如说 get 呀,我这个 pose 啊这些东西,那都可以说明这个 x 呢是没有问题的。然后让我们再看一下这个一个 prise, 那发现这个一个 pose 呢,立马就爆这个弧线,那说明什么呢?说明他是有问题的, 嗯,可以滑到上面啊,他这个尝试让我们去使用这个 npm 四套装一个这种生命文件的一个包,或者是通过这个底干印什么 model, 自己去导出一个这种啊,点 ts 的这种生命文件, 那这两种方式方式让我们去解决这个问题, ok, 就是为什么会有这个问题的发生呢?我们可以看一下这个诺的猫,就是这个 xo, 然后呢我们可以打开这个拍个直接色, 那发现呢这是有一个这个 taps, 说明这个 x 呢已经指定了这个生命文件,可以通过这个 taps 去指定我们这个生命文件,也就是这个 next, 点 d, 点 ts, 那就是这个东西, 他呢其实都已经通过这个生命文件把我们这些要用的东西都描述好了,最后呢通过这个迪克利尔那给他导出啊,就是这个。然后呢比如说我们刚才用的这个什么 get 啊,都在这什么 pose 啊这种东西啊?这是 x o 的。然后让我们再看一下这个 express, 一个 prise 在这,然后我们打开这个拍根结实,然后我们搜索一下 啊,他也是发现根本没有,他根本没有指定这个生命文件,所以说他会有这个问题。 ok, 然后让我们先用这种 迪克利尔这种方式去书写下这个一个 prise 生命文件,我们就做一个简单的小视力, 然后呢我们可以在他的根部下面建一个这个一个 prise, 点 d 点 ts, ok, 然后呢我们再用 d 克利尔声明一个这种全局的,比如说这叫一个 proys, 然后他应该是一个函数,最后返回一个,返回一个安静类型吧。 ok, 然后呢我们直接在这就可以使用了,通过这个一个 prise, 然后我们鼠标可以滑到上面,发现我们刚才做的这个生命文件呢已经生效了,他已经把这些什么类型的都给他补全了,那这就是通过这种低克链的形式去给他做这个生命文件。然后呢还有一种方式呢,那我们先把这个我们自己做这个文件给他删 掉, ok, 那我们再打开这个还有一种方式,他是让我们去装这个太不是一个包啊,可以先装一下 这个 give a price, ok, 然后我们可以把这个文件关了,给他重新打开一下, 发现那个包问题呢已经解决了,然后他有一个这个什么没有进行默认导入,这个问题呢我们改一下配置就可以了,我们就给他默认导出一下, ok, 然后我们鼠标划上去呢,发现他呢也已经补全了。然后让我们介绍一下这个,这个艾特泰克斯,他究竟是干什么的? 他是在那个刷新一下啊,在这 啊,这个艾特泰普斯呢,就是给我们去做这个生命文件的,比如说这个一个 prise 啊,搞了一个这个什么地点? ts 啊,这种东西, 就是为什么会有这种事情的发生啊?其实这是一个历史原因,那就是比如说我们可能新一点这个的 xo, 他自己做的那个类型生命文件,像比较老,这个一个 prise 他可是没有做的 啊。但是微软的为了解决这个问题呢,他就通过那个低克链那种方式啊,给你暴露一个这个让你自己去写。 但是呢有的这个框架呢,他不想去写,比如说这个有 frs, 他可能自己没有写,就让微软的这个官方团队呢,他有一个社区就是专门去写这个东西的。然后我们可以看一下,那就是在这个 npm 这个 npmgs 里边啊,这些他一共有好多,他一共是九千多个宝啊,基本上你常用的都可以找到, 比如说我们这个爱他,他也不适合这个 uprise 啊,都有, 那如如果一些特别冷门的东西,他可能没有,那就可能需要你自己去书写这个生命文件, ok, 那以上呢就是这些生命文件的知识。

哈喽,各位观众朋友大家好,今天我们来学习 typescript 的第十八张声明文件,也就是这个地点 ts。 那今天的话我们会学到一个新的单词叫 declare, declare 的话也就是声明的意思,它呢其实就是这个 d 点 tsd 的简写啊。对,这个 d 的全称就是这个迪克丽尔,那简写呢?就是这个 d 啊,对,他俩其实是一个意思。呃,在我们使用这个第三方库的时候呢,我们必须要使用他的生命文件才可以获得这个代码的补全,不然呢是有这个报错的。好的,我们来给大家演示一下啊。 呃,我们需要先生成一个这个 t s 抗风扇结塞啊,我们可以使用这个 t s c 杠杠 in it。 对,使用这个命令来生成。哎,这样的话我已经生成好了。对,直接生成就可以了,里面什么东西我都没有改啊。对,大家记得生成下就好了。生成完之后呢,在这新建一个 index t s, 然后呢再 通过 n p, m innit 对杠 y 去生成一个这个 pigger jason, 然后呢这个文件夹的话我就随便建了,这个叫什么都行啊。对,你们可以随便起,这的话,我是为了规范叫这这个名。 ok。 然后建完之后呢,我们需要安装两个库啊,来给大家进行一个对比啊, 我们可以先安装一个这个比较老的一个库啊,比如说这个 express, 那这个库呢,可以写这个后台的接口啊,相信大家应该都用过。对,呃,因为这个东西呢,它是由 g s 写的,并没有写这个生命文件啊。然后我们再安装一个右边写生命文件的一个库,就是这个 x, 那 axle 的话大家应该也用过啊,我们前端调接口都喜欢用这个,呃, axle ok, 然后我们来给大家演示一下,比如说我们可以 input 一个这个 axle for all 这个 axle ok, 然后呢,我们再引一下这个 express, 啊,对,给大家对比一下啊, 哎,你会发现 axle 没有报错,这个 e price 它是报错,哎,这是为什么呢?那我们先看这个 axle, 你可以使用 control, 然后鼠标去点一下这个 x, 哎,你会发现这时候进入呢,注意啊,这时候进入的并不是它的源码,是它的生命文件,注意看啊, 是 x 下面的 index 点 d 点 ts, 这个的话就是它的生命文件,因为这个库呢,人家已经自带的生命文件已经编写过了,所以说是没有任何报错的,并且呢,写起代码来还是有这个提示的,比如说 x 点 get, 对,发送一个 get 请求,对吧?还有这个 post, 哎,都帮我们在这个生命文件里面呢,提前已经写好了,比如说 post, 我往下找一找啊,哎,就在这你可以看到,这就是我们刚才所调的那个方法,他已经都帮我们去做这个声明,都已经写好了,所以说他是没有报错,并且呢是有任何提示的。而我们来看这个 express 那一个 price 的,我们点进去发现呢,进入的是它的原码,并不是生命文件啊,对,这是它的原码,并不是生命文件,所以说找不到它生命文件,它就进行一个报错啊,这也是为什么 t s 没有流行起来的一个原因啊,就是因为有很多这样的问题,就是 你想用一些第三方库啊,呃,在 ts 工程中想用一些第三方库,哎,他就会有这种问题,必须要有这个生命文件,哎,当然有两个解决方案。第一个就是,呃,这个他的社区呢,会为这些这个活跃的一些库去编写这个生命 文件,所以说你可以尝试使用 n p m i, 也就是 n p m install 杠杠 save 杠低位,也就是杠 d 啊。然后通过 it types, 注意,这是一个规范,就是安装所有酷的生命文件, 必须要使用 it types 开头,然后后面跟上你酷的一个名字去为他安装生命文件,你就可以使用这个酷了啊。这个方法我亲测过,是可以的,完全是可以的。当然一些冷门的酷是不会为你去编写的, 那不会为你去编写怎么办呢?那你就只能去手写这个库的生命文件了。那我们先演示一下如何去手写一个这个库的生命文件,我们就使用这个 express 为例啊。 呃,这是他提供的第二种方法,也就是去手写,我们直接把这个给他粘过来啊,给大家手写一次。这的话我们新建 一个,注意这个名字也是有规范的,要为谁去编写这个生命文件,哎,要为一颗 pros 去编写,它的规范是什么?点?地点 ts, 也就是 declar 去做生命扩充,哎,通过这个规则去建这个 ts 文件就可以了。 ok, 电商之后呢,我们先写一下这个 express 的一个模板啊,我们先把这个先给他粘过去, ok, 哎,你会发现其实他现在立马就不报错了,因为他现在可以找到我们自己所编写的生命文件,你可以再使用 ctrl 点进去,哎,就找到这个了,我们先写一下模板啊,等会我们再给他补全。 这个 express 的,它是一个函数,对,是通过,对,是通过这么去调用的,然后呢,它上面有很多方法,比如说点这个什么 you, 对吧?然后呢,我们还可以建一个抗 它一个,呃,这个 rooter, 对吧?一个 price 上面,它还有一个 rooter 的一个函数啊, ok, 然后 u 的的话可以给这个 router 添加一个前缀,也比如说杠 a p a 吧,然后把这个 router 给它塞进去,哎,这样子。然后呢,它还有很多方法, 比如这个如特点什么 get, 对吧?那就是杠 a p i, 然后有一个回调函数, r e q r e s 哎,这样子。 呃,阿里 q 的话就是读起前端传过来东西, rs 就是给给前端返回的什么东西,这的话不就简单写个模板,写的简单一点,返一个两百。然后呢再监听一下这个端口啊,通过 lisa 端口的话,我们就随便写一个九零零幺吧,然后还有一个回调函数, 对,这样子,然后 ctrl 点 log, 然后比如说随便写一个九零零幺吧。 ok, 然后这个 r e q 跟 r e s 这里边类型太多了,我们先暂定成安妮吧,对,它里面东西太多了,我们只是写个例子啊, ok, 好的,然后我们去为他去编写这个生命文件啊,现在肯定是不对的啊,然后他是一个这个对象啊, ok, 现在呢就已经是报错了。 呃,然后这个 express 呢?它是一个函数,所以说我们需要写个 interface, 呃, interface 都是大写开头的,就是 e x p r e s s 这样子,然后呢,它是一个函数, ok, 它是一个函数,它里面有些什么东西呢? 这函数里面还有个属性,还有个这个 rooter, 然后我们再写一个 rooter 啊,呃, interface, 呃, rooter, ok, 然后这这个函数里边呢,还有很多方法,比如说这个,你看有这个 listen, 还有这个 you, 所以说我们还需要再写一个 interface 啊,嗯, interface 叫什么?叫 a p p 吧, ok, 然后有哪两个方法呢?有这个 use, 还有这个 listen, 呃,我们先让这个一个 price 先,别让它报错了,因为我们没有返回啊,先把这个 a p p 先付给它。 呃,返回的话需要起一个变量,这个名字随便起。呃,我就叫一个 price 吧,然后把这个类型去付给他,然后呢?再通过 export default 啊,去给它导出就可以了,你会发现它就变成一个函数了,哎,就已经正确了啊。然后我们先把这两个方法先给它实现了啊,一个 use 和一个 listen。 呃,通过 a p p 里边儿,呃, use 是个方法, 然后返回值的话,来一个 word 吧。 ok, 然后它里面有两个参数,一个是这个 a p i, 还有一个是 rooter。 a p i 的话,我们叫什么? pass 吧,随便起一个,它是一个 string, 还有一个 rotor, 因为 rotor 里面东西也太多了,我们先定义成 angel, ok, 我们会发现这个 use 呢,它也就已经变好了,还有这个 listen 呢? 那再来个 lisa, lisa 的,它也是一个函数啊,然后它第一个参数是这个端口号儿,嗯,叫 port, 是个 number, 对吧?然后它第二个参数呢?是一个拷 back, 是一个回调函数,呃,就叫 c b 吧, 对,是一个回调函数啊,没有返回值,就是 word, ok, 当然这个回调函数可以有,可以没有啊,所以说可以加个问号,把它变成可选的。 ok, 那这两个都已经变好, 呃,还差这个 router, 呃, router 的话,我们给它填到这啊, router 它是一个方法,它的类型呢?就是这个 router, ok, 你会发现 router 就已经不报错了,但是它里边 router 里边还有方法, router 里边有个这个 get pose 的这些方法。然后我们这儿只是一个例子,我们就先定一个吧,定一个 get, 返回值是一个 word, 呃,然后第一个参数也是一个 pass 啊, 是一个 string, 第二个参数呢?是这个,呃,回调函数啊,也是一个拷 back。 所以说这儿的话,我们来一个 c b 啊。 返回值的话,同样还是给一个 word, 但是它有两个参数,有个 r e q 跟 r e s。 呃,这里边属性太多了, 这我们先给他定成安妮了,我们只是演示一下啊,这我们就不写那么多了。 ok, 写完之后你会发现,哎,他神奇的就已经变成这个正常的了。哎。这个的话就是我们去手写这个, 呃,生命文件啊,哎,这种方式也是可以的,带大家去写了一下这个 express 的一个生命文件,当然它除了这个扩充模块儿,还可以扩充些别的。我们来演示一下,比如说通过 迪克利尔扩充个全局变量,哎,也是可以的,比如说 a, 然后它的类型是个 number, 我们需要加一个声明啊,比如说 word, 这个都可以啊, like 也行啊。然后你会发现他就有了提示了啊, 哎,在这,比如说我们随便写一下,哎,哎,发现看到没有就已经是有这个提示了,比如说我把它复制成一个 force 肯定是不可以的,因为。因为什么?因为我们把它定义成一个 number, 对,我在我们这个生命文件里面已经把它定义过了,那这个的话就是一个扩充全局变量,当然他还可以扩充一些别的啊, 呃,扩充这个,呃,函数,对函数也是可以的,呃,就叫这个板栗,然后你们会发现这里,哎,也是有这个提示的啊,我们叫别的名吧,比如说叉叉叉吧, 对,叉叉叉, ok, 可以看到它是一个函数,也是有这个提示的啊,然后里边还有个参数,这儿 palmer 那也是没有问题啊。然后还可以扩充这个类也是可以的, 通过 declare, 嗯, class, 比如说什么 v u e 啊,这样子扩充类也是可以的。在这你看啊,比如说我们写这个 v u e, 哎,他就已经有这个提示了啊,啊,还可以扩充一些别的,比如说这个媒体也是 是可以的,比如说叫一个什么叫个 c 吧,然后里边有个 a 等于一个 e, 哎,这样子也是可以的,然后你就可以通过 c 点 a, 哎,就可以去调到这个属性了啊。扩充媒局也是可以的,还可以扩充全局的,就是 global, 然后还可以扩充这个, 呃, nim, space, 命名空间等等都是可以的。哎,我就不演示了,反正,呃,大部分的都是可以去进行这个声明扩充的, ok, 那这个的话就是一个 decal 的一个用法啊,这是我们演示的第二种方式,如果你不会去写这个生命文件,你也可以去尝试着去装一下我们刚才说的 他这个社区给写好的,所以说我们就先把我们自己写的生命文件给他删掉了,而他呢,现在应该又要进行这个报错了,然后我们去尝试去给他装一下这种,哎,你会发现其实这种也是可以的啊,如果你这种装不上,就是比如说 报一个四零四,那说明这个社区没有给他写这个生命文件,那你就必须要自己去写了。对,所以说你可以先使用第一种方法先装一下,如果装不上你再去写, 这一定是可以的,我们把它擦掉重新点进去,哎,发现,你看是不是一点报错都没有,就我们刚才写的是完全没有问题的,我们 ctrl 点进去,发现呢,就已经找到了它的这个 in index 点,地点 ts, 这个的话就是一个生命文件,而不是找它的源码了。 然后我们可以翻开这个 note modules and it types, 哎,它的生命文件呢,就是我们装的都是在这个包里边放着呢, 比这个 express, 哎。 index 定下 t s, 哎,就是这个目录啊,你会发现,呃,然后我们刚才装的这个 x 呢? x, 我们没有装这个生命危险。因为什么?因为人家自带的,你会发现人家在这个工程里面自带 了 index 的地点 t s, 并且人家在这个 pygastase 里边通过这个 types 还指定了一下,我们可以往下翻一下。 呃,给大家搜一下吧。啊对,你可以看到他在这呢,其实就已经指定了这些,呃, index 地点 t s 人家都已经都写好了,所以说是可以直接去使用的。 ok, 以上的话就是一个声明文件的一个讲解啊。

那接下来呢,你看我们上面给出了两种了,这个是我们上次讲过的,他叫类型别名吧,就是对于这个某一种对象的结构啊,分别起了一个名字, 然后呢,你看这个名字我们分别起了两个,第一个类型呢,我们叫做 bacy 音符,就我们自己起的名字,对吧?别名吗?叫什么都可以,其实就是基础信息吗?另外一个呢叫做联系, 为什么要有这两个呢?其实你一看这个界面一会就明白了,那你看他的对应的里面的这两个对应的字面量的这个格式,看到没有啊?如果是基本信息的话呢,我们现在里面是有 名字,名字啊,性别,哎,你看性别马上就用上了刚才的这个联合类型了吧,他可以是 m 代表男性或者是 f 代表女性,马上就用上 二九七都行,对吧?右边这个呢,代表的是这个联系吗?对吧?联系地址,所以呢它里面有邮箱跟地址,这两个都是这个自助串行。如果说你想表达一个这个完整, 那其实是不是要把两个都放在一块?就是,其实你可以想象,我们界面上其实有一个比较大的表单,他们分成了两大块,其中一部分叫做基本信息,另外一部分呢叫做联系。 所以呢,刚才分别定义了各自的每一块的他对应的这些类型吧。现在呢,但,但是你对于一个整的来说,整个这个表端来说,是不是应该把这些都合在一起就对了,对不对?所以怎么理解他呢? 如果说我们也认为像学习刚才的那个,或者那他对应的另外一种就是叫并且吧,但是呢,怎么理解这个并且,因为好像这个理解 有点不太通畅,对吧?这怎么叫又是这个左边的 a 类型,然后同时又是右边的 b 类型呢?其实你可以理解成合并比较,其实让他会把两个各自的类型 最后是不是合在一块了,变成一个大的了?但他最终也是使用一个 m 跟之前那个加拉斯的两个竖杠跟两个 m, 他用了这个 m 来代表合并。对,但是你不太好理解,是说并且,并且这个有点理解不通, 是吧?你不可能同时吃这个,并且是那个没有存在,不存在这样的东西,所以这个呢叫做交叉类型。 所以我们现在就要吐槽一下,你理解行为是不是有点问题?对,如果是我的话,我认为交叉类型他是两律交叉在一块,对,交集的部分相同的部分,比如说什么叫交叉? 他就是你有我也有的部分啊,比如说第一个类型里面有,那这个这个属性,对,如果第二个里面也有相同的,那,那是不是最终交叉的是他们的公共那个部分?但他实际上不是, 实际上是什么把两个的合集,而不是交集,好像没有。对对对,所以这就是为什么一开始就说我们吐槽啊,说反而是什么, 就这个地方应该叫做联合类型,对,是因为他是应该,对吧?他的第二种这个 m 应该叫做联合类型,因为确实他把两个东西给成了一个合集了吧,他两个都不落,都一样合在一起了, 对不对啊?并不是焦急,所以不知道他怎么想,但没办法,整体上人家还是很厉害的,发明了这个太脆,所以这个我们就只能跟着他叫了,他这么叫,我也这么叫,但你要记住啊,交叉类型并 是交集,其实是合集,那么,哎,看下代码好不好。想的这么多了啊,我们先看一下第一个这个优点,就联合类型, 联合类型其实非常简单啊,你看我们这哪个地方用了联合类型呢?卷底性别这,对吧?啊,我们用的联合类型就是或者这个,或者这个给了他两种自服串的字面量, 那么如果我们真的要去用的话呢,我们可以定一个啊,比如说 lucky 音符真的一个电量,对吧?我说他是 ac 跟音符型的啊,他的他的类型是这个对不对?下面看他怎么要求我第一个内 只要十个字一块就行,第二个 gmt, 他的要求是这个对吧?这个是当我把 gm 写错了,当我按下一个的时候,他是不是就给了我这两个选项,所以这也是这个写联合类型的好, 你给了他联合类型之后,特别是这种字面量的联合类型,他直接帮你提示出来啊,你一旦非得写错了,那就没办法了,对吧?你是连提示也不看你,你真是故意的了,且 a, 当然他也会包租婆在你身后也不会放过你,他说对吗?不能将类型 a 分配给类型 m, 因为我写的其实也是一个字面量类型,所以就不对了,对吧?所以我只能给他呃, m 或者 f 吧。所以有时候也是一种经常我们用的这个小技巧,使得你在输入的时候呢, 人家还有提示也不会出错了,有时候会懒得写,那个媒体的时候,我们就直接写错就得了,媒体行李还要定一堆,直接在这其实用起来也很爽,所以这个呢是优念联合类型,非常简单吧?看一下刚才第二个哈,叫做交叉啊,实际上是合集。那么交叉类型我们刚才 举的就是这个例子,比如说我们现在第一个看一眼,这个是不是刚才的第一个类型啊? accf 基础信息,他呢有一个名字,有一个性别,第二个呢是我们这个联系方式,一个一秒一个 x, 对吧?那么你看我现在是创建了一个叫做 所发有的新的这个类型,他就是由这两个啊交叉啊,其实合并在一起的,对吧?用这个按的这个操作啊, 那么我们看一下,如果我们定义了一个 flig 类型的话,你看我是不是把所有的这个都收集到一块了,我缺一个他都会跟我要, 我去掉一个,他就跟我说什么缺少了一个东西啊?你看 x 缺少了 x, 所以我就得补回来,对吧?我们不能缺少他的任何一个东西,一个都不能少。

嗨,大家好,我是吉米啊,那今天这个视频我们一起来看一个呃 t s 的一个问题。那其实今天这个视频就不是呃跟大家分享一些技术了,而是向大家请教的一个问题啊,因为我 t s 一直都不是很好。那呃,在我平时开发中经常会有 类似这这种场景,比如说我知道有一个对象类型,那他我知道这个对象里面他一定有 name 和 ag 这两个属性的,但是他也有可能会有其他的一些属性, 有时候有一些啊, sex 啊,点点点之类的一些其他属性,但这些啊都是未知的,都不知道他有没有啊,可以有,也可以没有,那这时候啊,这种应该要怎么写呢? 嗯,有知道怎么写的小伙伴们可以在评论区留言看看应该怎么写。那后面我现在自己研究出了一个写法,但但是感觉好像不是很优雅, 大家可以看下这种写法对不对。比如说我们可以来个 t 啊, t user, 那他这 t user 就是我们后面要用的这个类型,那他是这个 t 被子类型,他就等于这个 t 被子类型 和另外一个类型的一个和一个的一个结合啊。比如说他另外一个类型,他可以是一个他的 key, 可以是一个词句型类型,其实是一个 any 类型, 我们看下这种这样的写法,好像这样写好像就可以了,比如说我念控制的一个静,他是一个 tu 的类型, 那这时候我们可以来看一下,比如在这时候来个 name, 机密 age 二十二。哎,看到这时候,呃,这 t s 类型好像就生效了,大家没有报错,那这时候我也可以往别的类型去写,比如说我写一个,呃, live 二二, 别的这时候就随便写,他也不报错了。那这个是我后面发现的一个写法,但是我感觉应该有别的一些更简单的一些写法吧, 那不知道小伙伴们是否有更好的写法?那如果有更好的写法,呃,大家可以在评论区留言啊,谢谢大家。那这个视频就分享到这里了。

那么什么叫联合类型啊?就是刚才其实在最后你看到的那个竖线啊,那个竖线叫联合类型。什么意思?来,那么你看到那个竖线是谁啊?是,是我们以前敲那个祸福啊,那个其中一条线啊,就一条线就行了啊,这个东西叫联合类型。 什么意思啊?我给大家看一下。呃,比方说我们可以定义一个,有的时候你确实在定义一个变量的时候,确实我有时候要数字,有时候要 字母上,对不对?有时候要数字,有时候要字母上,那么呃,这个数字 and a, n, d, and 字母上 s, t, r。 好,我定一个这个变量,然后呢?啊等于。好,那么这个是一个十,当然了如果你什么都没写,你会发现他就是一个 number。 好,但是我想说他可以是数字或者可以是字母上,那么怎么办呢?冒号,然后 n u, n b 啊 number, 然后竖线 no skin d i n g, 这个啊好,那么这样的话呢它就可以你记住数字,那么我还可以把你改成字母串 啊,这个其他的都是你,反正你写一个,随便写一个 atr 啊,随便写一个是不是也是对的? 对,那么所以这个竖线有点像什么?有点像我们以前的货,对,货啊,货,这个叫联合类型啊,他的一个专业术语叫联合类型啊。好,那么所以这两个啊 都行,这两种类型都可以啊,都可以啊,那种类型他或者他,他或者他啊。好,那么那如果说你没有写这个你就写 number, 或者或者就没有写, 能不能?能不能这样想?不能啊,没有写的话默认就是他复职的初始职的那个类型,对不对啊?所以啊,知道他的语法啊,要知道这个语法好,那么行,那这个因为加上这个联合类型,他就可以了啊,他就可以了。好,那么这是一个, 嗯,然后我给大家看一下这个题啊,看下这个题, let 一个啊,依旧是,嗯,我把它二吧,然后呢,注意,注意哈,注意,我现在这样写这个, 那么他的值这样写是什么意思呢?你刚才是 number 和使劲,你为什么写成一和二呢? 一和二可不可以是类型?可以,老师说这种类型是不是我们在第一节讲的常亮啊? 常亮,所以他就必须是一个常亮,要么一,要么组串二,你写一就对了。好,然后你写二呢,就不对了,为什么?因为二应该是字符串,所以来到这边应该是组串,所以你只能是这两个职支一, 你就是一个数字二都不行啊。所以在这里面一啊是可以的啊,是可以的,所以在这里面啊,在这里面你可以看一下啊。我把它改, 改成了二,改成这个一号二是对的,是可以的,但如果你是把它改成这种数字二,那么就报错 啊。注意,一和二在这里是类型,一和二啊,在这里是类型, 在这里的一和一号二 是类型啊,类型,那么其实也是常亮啊,常亮,常亮,所以 number 的只只能是表示啊,表示 表示这个乐直,乐直只能 是对这个货,这个货 好,那么这个以后小心了啊,他在这里不是不是说啊,我这个这个是什么类型啊?还是什么啊?他就是类型,没错啊,就是类型,但是你不能够等到,等到其他纸啊,其他纸好,那么还有一种情况啊,还有一种情况 let 一个 op 卷这种,呃。 让我写一个这种我就写一个。嗯,这种注意看啊注意看这种 我给他一个这个吧。三好,大家注意看哈大家注意看。这啥意思? 这句话做了什么事情?声明了一个变量对不对?然后给他了一个类型是什么?首先问一下他有没有值啊?现在还没有吧?没有副职,没有副局看不见等于号没有副职,那么只是给他生命的类型 类型。但是这个竖线是货,表明了什么? 表明了,表明了你必须得有这个属性或者这个属性, 明白吧?你必须得有这个属性或者这个属性。那后面这个呢? 冒号后面是类型常亮表示这个值 只能是一啊只能是一。那么,呃我们看一下我们看一下吧啊在这里,哦不对哦不对哦不对啊。那么,呃这个哦不对。然后等于你去复职就知道,哎。这么好,这个一。 呃。 a 号冒一然后我们看一下啊这里面这个这个是没有错哈这个是没有错。他因为他他已经给你,你看我们刚才这么写他已经上面已经给你翻译成这种 啊,你可以翻译成 a 等一啊, b 等于 b 这个三啊, a 的值一, b 的值负死啊这个这个引号三啊引号三不是负三啊。好,那么这是对的。然后呢可不可以这样子呢?就 a 啊这种这种 就我两个都写,因为他中间是什么线啊或竖线,所以在这里面冒号一逗号注意 b 然后呢再冒号 是不是也是可以的也是可以的,因为中间这个竖线你要你要表示啊你要表示货的货的货的,那么要么你得有这个,要么你得有这个,是不是这意思啊?货啊,表示啊,表示要么 要么有 a 属性属性,要么有 b 属性, 那都有,行不行?行啊,都有,没问题啊,都有没问题。好,所以那,那 所以我这个手,我 b, 我只写一个 b, 行不行,对吧?是不是也可以?你要么有 a 吗?要么有 b 吗?所以或者就是要么这个,要么那个 啊?行,那么这个呢?你就知道说啊,他的一个写法啊,是这么样去写就可以了,那知道这样写的一个表示啊,这样写的一个表示,行,那么这块我们这节讲了什么?就是联合类型,你要知道这个竖线啊,这竖线表示的是祸的意思, 表示货的意思啊,那么永远跟货挂钩就可以了啊,那么还有一个就是这个啊,这个表示他的值只能是一或者二啊,那么这边也是一样的啊,他要么有这个,要么有这个, 那么我可不可以有一个 c 呢?有一个 c 呢?是不行啊,不行啊, 你看他怎么说的,你看他这里面怎么说的,不能将 c 是俊,那么分配给这个东西类型啊,所以不能有其他属性 不能有其他属性,所以这个是没有错的, 搞错好了,行,那么这块的话,来,我给大家点时间,你自己呢琢磨一下啊,把这个竖线给他自己用几遍啊?把它用几遍用起来啊,用起来。

啊,这个对科理化这个函数做类型标注还是有点难度的哈。呃,但是呢,也关键是看谁讲啊,我讲的话,那就没有什么难度,来试一试吧。首先认识一下这个科理化啊,他传入一个函数,我这里传入了一个随便写的函数啊,求和。然后呢,他会返回一个新的函数,这个新的函数呢,会被转换成为单餐函数, 无论原始的函数有多少参数,那么这个新的函数只接收一个参数啊,这是函数是编程里边非常重要的一个工具。那么具体怎么用呢?就是调用这个新的函数的时候呢,传入一个参数,哎,现在参数数量够不够?不够对吧,他需要三个,我现在只传了一个,那怎么办呢?于是呢,参数数量不够的情况下,他又会返回一个新的函数, 新的函数又会接收一个参数,你给他传过去,那么现在有几个了?之前传了一个新的函数,里边传了一个是不两个了,还差一个,于是呢,他又会返回一个新的函数啊,就这样递规下去,直到你把参数的数量补齐了,那么这个函数才会真正的执行 这个颗粒化吗?啊,很多朋友都知道啊,那么关键是这颗粒化啊,这个玩意怎么来做类型标注呢?比较简单的做法呢,就是写成这个样子啊,你接收一个函数作为参数,返回一个新的函数完了,但是呢,你用这样的方式来做类型标注的话,相当于就没有标注, 因为基本上起不到什么作用。你看啊,我得到这个新的函数之后呢,我调用的时候我并不清楚我需要传什么类型的参数不知道,我传一个支付串他也不报错,传一个对象他也不报错, 然后他返回啥呢?也不知道,对吧?我只知道他是一个函数,你看把这标注了,但他返回啥不知道,返回的是函数吗?不知道。那第二个函数要传什么类型参数呢?不知道。那我第二个函数传的参数过后,参数数量够了吗?不知道,我啥也不知道。 说这个玩意你能标注吗?可以标注,但是你这样写的话,基本上跟 ts 就没啥关系了,只是为了让他不要报错而已。那么问题是我们怎么写这个颗粒化函数呢?哎,这个时候啊,我们肯定是不能在这里写方形的,这个范围太大了。我们知道啊,颗粒 返回的这个函数啊,他的类型的细节肯定跟这个函数的参数列表和返回类型有关系,你说是不是吗?比方这个函数他第一个参数是 number, 那么这个函数返回的函数他接受的参数也应该是 number。 如果说这个函数他只有一个参数的话,那么这个函数他的返回类型是不是应该跟他的类型是一致的,因为传入一个参数就够了,对吧?那么返回的类型呢,他就不能是函数了,他就是这个上这个函数的返回类型。所以说无论怎么样,就入餐的函数参数和返回类型跟他肯定是有关联的, 同时呢,我们要把这个关联呢给他弄到位。所以我们这里需要知道两个东西,一个是他的入餐列表,我们用 a 来表示啊, ok, 名词,一个是他的返回类型, r 好使用翻译型呢,我们就建立了两个东西啊,一个是入餐这个函数的参数列表和返回类型。 有了这两个东西之后啊,我们就可以把它细化一下,入餐的这个函数啊,我们就不用方个形来写了,我们把它写成这种格式,他不是有参数列表吗? 统一用 ax 来接受,因为你用这种写法的话,可以涵盖所有函数的情况,你想是不是嘛?你无餐,那这个玩意就是一个空数组,你有十个餐,那么这个数组的长度就为十,懂这意思吧。好了,那么这里呢,这个 art 它的类型应该是什么呢?它类型不就是这个 a 吗?对吧? a 表示的就是入餐那个列表 a, 它的返回类型是啥呢?返回类型不就是个 r 吗?好,这样写了过后呢,这里有一个错误啊,他告诉你这个 a 呢,必须要做个约束,他必须是一个数组,为啥呢?因为你这里用了剩余参数吗?对吧?所以呢,这个 a 必须要是个数组啊,我们对这个 a 呢进行约束, tens, 他是任意的输出。好,你看啊,我们这样子写了过后呢,事情发生了一些有趣的变化,由于我使用了两个发型,而且这两个发型呢,关联到了参数这里,那么这样一来,我们就可以借助 ts 的类型自动推导功能。比方说我们调用这个 carry, 把这个上传进去, 看一下它推导出来的这个 a 和 r 是啥? a 是啥? a 是这么一个原组,对吧?三个参数, a, b, c 都是 number, 然后返回的类型是啥?返回的类型是 number。 那么这个 a 和 r 是不是被 t s 推导出来了?他怎么推导出来的?因为你传了一个函数啊,哎,他把这个函数往这里一对应,是不是就把 a 推导出来和 r 推导出来了?好,那么这样子呢,我们就可以通过这个表达式,能够让他自动推导出参数列表是啥,还有返回类型是啥, 那么借助这一点,我们就可以开始写这个了,他返回的到底是个啥呢?我们可以观察到啊,他返回的类型呢?有这么几种情况,肯定是一个函数,这是毫不疑问的。那么这个函数的规格他到底是什么样子呢?有这么几种情况,情况一,如果说你传入的函数,假设啊,是没有传出的,我就返回个字,不错,你看他推到的 a 是一个空数组,推到的 r 一个字不串,如果说是这种情况下的话,那么我返回的函数应该是啥样?你觉得应该是啥样?他现在都不需要参数了,那么我返回的这个函数呢?他应该是直接调用的,对吧?一调用会返回什么?返回个字不串。所以呢,第一种情况就是原始函数的参数列表长度为零,那么返回的函数就是应该是这种格式。这第一种情况,第二种情况,哎,我这里只有一个参数, 他说他是一个 object, 随便写啊,你看这里推导出来 a 是啥? a 是一个长度唯一的数数,这个是啥?这是一个返回结果支付券,是吧?那如果说只有一个参数的情况下呢?那么我返回的这个函数啊,他应该是一个什么样的规格呢?他就应该是接收一个参数,查查查,然后呢,返回的结果为 r, 对吧?因为你传一个参数就够了呀,那我就应该执行函数返回结果了。好,第三种情况, 什么情况呢?这种情况,那么这种情况下返回了新的函数,他也应该是只接收一个参数,而返回结果呢,他就不能是这个函数的结果了,因为这个函数现在还不能运行,要返回一个新的函数,对吧?那个新的函数也是一样,只接收一个参数,怎么样怎么样? 总之呢,它有这么三种情况,所以呢,这一块你可以想象的到,代码呢,是稍微有点多的,要分情况吧,所以呢,既然代码多,我就把它写成一个类型来进行处理。 thay 为 horry 就是颗粒化之后的东西啊,当然呢,我为了制作这个类型,你需要告诉我参数列表和返回类型啊,就是个 a 和 r, 你要告, 然后呢,我来定义这个类型,那么如果说我定义好了之后呢,我就可以把这个玩意呢写到这了啊,把这个结构先给他写出来,那么接下来在这里就是不是就可以分情况了啊?其实这个效果里边你要说要有多深的技巧,那么谈不上,我写出来之后呢,你会发现每一行都是非常普通的 ts 代码,跟我们平时开发一样,对吧?都是有循环判断函数这些最基础的元素组成。 说代码本身呢,是不值钱的啊,也都会写男的是什么呢?男的是在什么位置去定义循环,什么位置去定义判断,定义什么样的函数,这是真正值钱的地方,说白了就是开发的思维是值钱的写出来的一代吗?是不值钱的 培养开发思维,那你就需要看我的大师课,这课程呢,是完全免费的啊,来领取就完事了。这个大师课呢,应该是你看过的所有课程当中能在最短的时间内最大幅度提升你开发能力的课程。当然,大师课里边还不仅仅是开发能力的培养啊,还包括浏览器的渲染原理,无忧的原码优化,比面试题,各种项目 实战效果的实现等等等等。而学完这个课程呢,你只需要花一周的时间认真的把它看完。而且呢,目前这个课程呢,还是完全免费的啊,还没领到的同学可以来领取。怎么领?就咱们评论区第一条,然后呢,加入我们的粉丝群,根据提示领取完成了。好,接下来就来写这个 cree, 我们怎么写?其实这里就是思路分三种情况,于是就三个运算呗,什么什么情况?然后呢,我得到啥啥啥, 否则的话啥啥啥,对吧?就是这么个格式,我们看第一种情况,什么情况下,这个玩意会得到这个类型的,什么情况下?不就是这个 a, 他是一个什么空数组,对吧?他不需要参数,那么这个条件还是很好写的,就是这个 aa, 一个是 tins 空数组,完了,当这个条件满足的时候,我要得到啥?我要得到这个东西, 否则的话怎么样?否则的话就后边的情况,对吧,我们先暂时的在这里写上一个 number, 好,咱们来试验一下啊,看行不行,比方说我这里不写参数,他就返回一个支付串。好,咱们来看一下啊,得到这个 cree 上,你看他的类型标注是不是就是空参数,然后执行过后返回个支付串, 那如果这里返回的是一个数字呢?那他执行完了过后,他就返回一个数字,对吧?哎,这种情况我们就搞定了,否则的话,我们要看一下是不是第二种情况。第二种情况是什么情况呢?只有一个参数,所以说在这个第二种情况下,他也应该是这种格式,什么什么条件,如果说满足,那就是第二种情况,对吧?啥啥啥啥,返回了一个 r, 否则的话就是第三种情况 不对。好,我们再来这里写,什么情况下我们会得到这个东西呢?那也就是说这个 a 啊,他应该是这么一种数组,这个数组里面只有一项,而且呢,在这里呢,我需要把这个内一项的类型给他推导出来啊, 然后先写个尾代码啊,只有这一项,半个,行吧,那如果说是这种情况的话,我应该得到什么呢?得到这么一个函数,他只有一个参数,这个参数的类型呢?是那一项的那 类型,就这个数组里面有一个参数,那么这个参数是什么类型,那我这里就是什么类型,所以说我在这里呢要使用关键字啊,叫做英粉,如果说你听过我这个系列,上一节课的同学呢,应该知道啊,我单独的去讲了这个英粉,充分的利用 t s 的类型推断,让他帮我们 推断出这一项是什么类型,然后给他取个代号。比方说啊,那么我这里呢,就把这个类型放到这啊,这是第二种情况。第三种情况呢,我们先把它写上叠本试一下啊,走保存啊。然后呢,比方说我这里只有一个参数的情况,那么我这个调用 carry 得到的新的函数,你看他就知道了啊,这个参数的类型呢?跟他保持一致啊,跟这个类型保持一致。那么这个类型如果说是一个支付券,那 你看一下这边是不是也跟着变成了支付串,对吧?这是一个参数的情况。好,最后就是多个参数的情况,多个参数的情况呢,我们也可以用这种方式来约束啊,如果说,哎,他是什么情况呢?他是多个参数,如果说是这种情况下的话,那么我应该返回的是什么呢?是这种格式,对吧?否则的话,那就不知道是什么错误的情况了啊,那我就给他写上一个 number, 不可能的情况。 那么呢,经常我们作为一个逃出条件啊,就是所有的正常条件都 ok 了,那么最后一个条件呢?就是那会结构呢?肯定是这种结构啊,他多个参数的情况呢?我们就得到这么一种格式。好,现在我们来研究啊,首先是这个 x 是啥?他是什么类型? 他应该是什么?他应该是这多个参数中的第一个参数的类型,对吧?所以说我们的多个参数呢,我要这样子来写多个参数,我第一个参数,我要把你推导出来啊, 剩余的参数呢?我不管,这推导出来的剩余的参数的类型,没问题吧?那么现在呢,我这里 x 应该是啥,那把它写成那个 para 嘛,格式一致,那是不是也应该是第一个参数类型, 那么返回啥呢?哎,返回的是一个新的函数,哎,这个新的函数是不是再来一遍这个 carry, 对吧?把剩余的参数再来一遍 carry 的,你琢磨这个道理吧,我这里固定了一个参数了,那后边的参数要靠新的函数去固, 那么新的函数的固定规则不跟这个类型规则一样吗?所以呢,这个新的函数低一规的调用这个 cree 好,那么这个 a 传啥? a 传的是什么?就是个 race, 对吧?剩余的参数 r 传啥? r 不变。好,你看这样子写的过后啊,我们如果说在这里加上一个 b number, c objects, 随便写啊,你看我们这个 curry 上,他拿到的是第一个字符串参数,所以说你这里如果说不传要报错的。好,传了过后,他本身是一个啥?他本身是一个函 数,所以说他第二次调这个函数的时候呢?嗯啊,这里有问题啊。啊,这个问题的原因呢是,这应该是怎么 race, 对吧?好,再看啊,第二次调这个函数的时候呢?你看要传 number 了,因为他第二个参数是 number 啊。第三次调这个函数的时候呢,要传一个 up 几个词,对吧?最后个参数是 up 几个词,要 选个对象,那么第三个函数他就已经能够得到返回结果数字了,以后不要再把他的函数调用,他要报错了。啊,为什么呢?他说数字类型 number 是没有调用签名的啊,那就完事了。其实我们现在指着这个 carry 上已经可以看得很清楚了。看到没,第一个参数得到一个新的函数, 新的函数呢?第二个就是也是接收一个参数,这个参数呢,是相当于原始函数的第二个参数,然后他也会返回一个新的函数,这个新的函数呢,接收第三个参数,然后就返回最终结果了,对吧?他会动态的根据这个玩意来调整,我这一改你看他就变成这样了。 那么现在这个颗粒化的这个类型标注就写的非常完善啊,这才能够发挥 t s 最大的功效。就代码了倒是没几行,关键是你要有这个能力把它写出来啊。


股权投融资工作过程中,关闭上经常要签署一份文件,叫投资意向书,或者叫投资条款清单,简称 ts 文件。咱们今天就说一下 ts。 首先,投资人可以通过这份文件锁定项目公司一段时间,在此期间,投资人可以开展禁调,并做出最终是否投资这个项目的决策,避免被人截胡,自己白忙活。所以 ts 文件当中一般就会有一个条款叫排他,条款 中约定项目公司在一定期间内不得接触其他投资方。其次, ts 文件当中有一个保密条款, 项目公司和投资人在进行融资谈判接受禁掉的过程中,难免要跟投资人披露一些自己的商业秘密,所以建一个保密条款对融资方来说就显得特别重要。 最后,不管是项目方还是投资房,可能都有一些自己的偏好、交易惯例或者说红线,那如果能就一些关键交易条件或者这个底线提前说明并达成一致约定在 ts 文件当中,就可以避免在之后的谈判、调查、开会这些工作当中 太浪费大家的时间。所以各方如果能先就交易的一些关键条件达成初步意向,哪怕是一个范围,也对提高工作效率非常有好处。 这也是 ps 文件为什么他只是个君子协定,但大家都会用到它的一个原因。之所以说 ps 文件更多时候是一份君子协定,原因主要有这 么几点, ts 文件当中约定的这些内容,要么是负条件生效,要么是内容不够具体明确,要么在后面的条款当中干脆直接说以上这些 条款没有法律约束力,所以 ds 文件除了排他条款和保密条款以外,其他大部分的条款都 不具有法律约束力。至于 ts 当中涉及交易实质内容的那些条款,比如估值条款、公司治理保护性条款等等,将来在签署增资协议的时候都会进行细化的约定。有一些呢,还会进入到公司章程当中, 具体是哪些条款,我们在以后会详细跟大家解读。点击关注,守护你的创业之路!

各位同学大家好,欢迎大家参加十天技能课堂系列,我是主讲老师李安辉。今天我们来看 tfboy 的第六节类型推断和断言。这节课呢,我们讲一下类型的两个小功能。第一个呢,叫做类型推断, 如果我们不使用类型注解的时候,就是强行给他设置个类型的时候呢,那么他所以呢,将自行对变量的类型进行推断。那么第一种是什么呢?比如说我初始化并负值的时候呢,给他一个 第一个初始值,那么这个初始值是什么类型?他最终就变成固定化。固定为什么类型?我们来看一下。第一种好,在这里呢,我们输入个零六, 然后在这里我们写个零六点 ts 好嗯,类型推断 like 啊子等于一百。把鼠标放在这里你就会发现,哎,他就会有一个啊子冒号男宝 fast 智能好。然后我再强行将他数 复制为尼斯德利。这个时候呢,他就会报错了啊,他不能将数据复制给南博类型。好了,这是第一种。那么第二种我们再来看。 如果声明的变量的时候呢,并没有进行有效复制啊,并据啊,那么这个变量将是 a 类型。那么 任意类型啊,比方说我们来看 like youne 什么都不做的情况,鼠标放上去看一下哦,是个 ad 类型。然后我们怎么做呢?我们可以给他复任一只,比如说你是一个王小姐啊, misse 王对吧, 是个自助串吧。你也可以继续数值五二零哎,是个数值没有报错。任意类型 ok, 哎,这个是个 a 类型。 好了,那么第二种第三种函数的参数和返回值也可以推断啊,只不过这个参数呢。啊,需要关闭严格模式,否则他会报错。 那么我们来写一下因货括号南博一,逗号南博二。好返回执行。不搞不考虑哎。鼠标放上去 哎,点一下,你看出现个问题,他影视会有哎,那类型。那如果让他不爆错的话,我们在 ts ctrl 点 ts 这里呢。第二十八行啊,有一个严格模式,将它改成非严格模式。这个时候哎,通过了 就要借就没有问题了啊。当然我们这个就不不考虑这个问题了啊,我们都用严格的来做啊,这边就演示一下就 ok 了啊。那如果是严格的话,那我就强行给他来一个啊。这个呢,我就来给他来个支付串吧。 主要是后面这块。后面这块你不需要你。呃,这个严格模式也是可以不需要进行控制的对吧。啊,那我们这边就简单了哎,返回出南博一就行了。那我这里输出一下音符括号 二,输出个十,输出一百,然后输出个密斯的力在这里呢。拍 太棒, out 哎。看一下他的类型,右击看一下啊,你只输出返回一个 一,他就是个男模类型,如果再加上 str 一啊,字不串,那他返回来就是一个字不串类型对吧?哎,他是个 id 类型。可以书包放上去哎,他啊,是他这边没有显示对吧。 好, ok。 那么下面我们再来看一下下面一个嗯,叫做类型的断言啊。类型的断言在联合类型传餐的时候呢,我们可能需要判断呃类型来做响应处理。 那其实呢,判断类型呢,我们以前啊加翠的经常用 tybooff 进行判断,但还有另外两个对吧?呃,以后还会碰到 这个例子呢。其实也可以用太报奥弗莱类型,但是后面有更多复杂类型的时候呢,他就有局限性了啊。所以我们就先用这个例子,因为后面还有很多类, 我们还没教。所以说还不不好用别的例子啊。获取参数的长度我们来看一下 获取参数的长度好方向 y 音符嗯,先传一个啊。不是音符,他是男模类型,他也是 sj 类型。好,返回的时候呢,强音也是个男模类型。哎,这样可不可以 好,那我们是怎么判断的呢?我们不用太报复啊。就是他如果说这个音符他的长度 有长度的话,那么他就说明是字,不算怎么怎么样,如果没有长度的话,就怎么怎么样。但是一开始他就错了, 一开始这边就报错了。这个报错是没有返回啊,先不管他,那这个报错呢?就 这这这音符就不能掉呢?为什么呢?大家来看一下为什么不能掉?如果他是竖直的情况下,大家来看 monen 宝,他是竖直的情况下,等于一百,没问题吧。我输出 man 宝,点上个愣 是不是报错了。哎。为什么报错啊?因为数值他没有这个属性,所以他需要点上个 touse 俊,转换成字不串才可以。但是那为什么这块会错呢? 好,为什么最快会爆错呢?哎,我就把笔记上这一段,我复制一下啊,然后再读一下。 这里会报错是因为访问联合属性的时候呢,他会一个一个的去检查所有类型是不是都具备这个属。 只要都具备这个属性啊,只要有一个不具备就报错。他不关心你传过来的纸是否是某一个类型,他只关心你这个调的属性呢,是不是都都支持,只要有一个不支持就 pass。 好。那么这个这样做就没有办法了。这个时候呢,我们就需要进行类型的断言操作。那么还是这句话。那么类型怎么断言呢? 首先因错点愣子,他只能是字不串才可以操作。所以我这边呢啊啊, 断言为俊啊,七片变音器不爆错啊。哎,是不是?呃,是不爆错对吧?然后我们就嗯, 如果。哎,我们先输出吧。呃,如果。括号什么呢?他的语法有两种,大家来看一下。 断言的语法有两种,坚固号类型,空格直。但是后面还有种类型呢,就是用坚固号的。所以这边又有坚固号的话,容易混淆,所以不推荐用第一种。 而且这个第一种呢,也不支持 gsx 的语法啊,语法只支持第二种,叫直 x 类型。所以说我们推荐用第二种。 那么在这里写个什么呢?应付 a 强行推断为字不串啊。你不管全是什么值,我先强行推断为字不串,那么字不串他就有认词了,这样就不会报错了。如果真的是字不串,那么怎么办?就让他返回括号。 那这边呢,也是的啊,防止报错,还是要用这种方法去输出,这样就不报错了。那这一块没有通过呢, 他把他断言成是俊了,但是呢,他本身不是死俊。最后呢,他的长度就没有办法获取到,所以说他就 airs 了。 ars 的话,那他就是数值。如果不是数值,如果不是这两种直接报错对吧。啊,如果不是, 怎么算是竖直的话,那么直接 q 信符号点到愣子。哎,整体不报错了。看到没有啊?整体不报错,那我们看看能不能通过啊,先输出谁啊? 呃,先出出,我们看一下麦音符括号一百,看看能不能得到三啊三得到了啊。好, 我们再得到 miss 的力看一下 好,六也得到了。哎,就正确了啊。那么他不通过的时候,他得到的结果是什么呢?大家来看一下。 如果通过的话,那么很简单,两个六啊啊六,六啊,这个这个六呢?是这一块的。如果没有通过呢,我输入是一百,那么最后一个得到的是三,那么这个得到的是几啊?就是在倒数倒数第二行啊。 好,就是奥迪 f i 的啊,这边就等于奥迪 fex, 如果是奥迪 fex, 那么就 a 要死了对不对? ok。 好了,那么这节课呢,我们就讲到这么多,最后呢,感谢收看本次课程,谢谢大家,再见!

类型可以起别名啊,类型别名啊,那么比方说啊,他用的这个关键字啊,他用的关键 tvip, 太太婆也是用太婆。然后呢?呃,你剩下的这个名字啊,就你自己起的哈,那么他,他这个东西起了之后在哪里用呢?在你后面定义, 你在后面定义。比方说对象的时候啊,来推一个 oppo 键的时候,你可以用它来推一个 oppo 键的时候,或者来推一个什么大啊?这个不,这个是俊啊,俊啊 t r 的时候,那么可以用它啊,比方说我,我,我待会给他用,那么我就这个东西呢?我给他一个一, 就这个,那我怎么用呢?我起个名字,呃,比方说你可以是一个 str, 也可以是一个啊,或者说是一个,嗯,或者 ovooooo, 我们的一个 numanum。 好,那么那也就是说我将来他可以是一个 str 啊,或者是一个,那么 n u n b 啊,那么当然我可以把这个类型给谁呢?把这个类型给他 好意思?就是他将来可以是一个速算啊,他将来可以是一个速算,那么在这里面啊,可以啊,可以。然后呢,呃,你也可以把他这个 strstr 来,我们走一下 str 啊,那么是,好的, 这个灯泡好,那么这样的话都是对的啊,那么相当于,相当于还是一个,还是一个用来自定义类型的啊?那么用来自定义类型啊,这个叫别名啊,别名 定义一个,自定一个类型,自定一个类型,然后再准备用了啊,用了。 好,那么,呃,他还可以给什么?给对象去用,给对象去用,我们写一个给对象用的啊,来,来啊。不,这个 type typ type, 写给对象用的,那么这个叫 object 的一个 type typ type, 然后等于,那么对象用的话,对象他大概长这个样子。 a, 那比方说我给他写一个 n u m b, 啊,他是一个 number 啊,他是一个 number 啊,那么且吧,我给他一个,呃,交叉啊,那么且,他是一个二, 好,那这样的话,他就相当于说他得是数字二了啊,得数字二了,那么 b 的话呢?我给他一个 s t i 啊,好,那就这样,好,那一旦一个数据,一个对象,他已经付了这个类型,给他付了这个类型,好,那么他在定义的时候,他就得满足 这样一个类型啊,那么什么呢?他必须要有 a, 那么 a 的话呢?必须得是二。好,那 b 的话呢?那就给他一个啊? bb, 好,那么给他一个自助上,好,那这样的话呢?相当于我给对象去用了啊,给对象去用了, 好,那么,呃,这里面啊,这个你看我可以给什么?给支付宝上用啊?给对象用啊,现在都可以啊,都可以。 然后呢?呃,实际上他跟我,那他跟我们这个,嗯,所谓的接口啊,这个有什么样的一个区别?我们早上不。这个我们刚才在接接口的时候,呃,说他可以同名,对不对? 他可以同名啊,那么,哎,我们这个东西他能不能是吧?哎,去定义一个同名了,对吧?那我们看一下啊,尝试一下说,我在这里面定义一个,你会发现已经有问题了, 对不对?我这面啊,比方说我给他一个 c c 也是一个数据,我发现有问题,有问题,你看重复,所以其实他在这里面其实不支持这种同名的 啊,不支持同名的,所以其实你基本上你看已经在跟你说这个印度 face i n t 啊, f a c e 和 c e 和,和谁和太婆的区别了。 ty 啊,这个太婆啊, tytyp t y t 的一个区别啊,那么区别,所以他们都可以用来制定,都可以用来制定义啊,这个类型都可以用来制定,类型好,那么 也都可以给我们对象呢啊,去定义类型都是可以的啊,但是呢,有个问题,就是这个类型别名类型别名啊,他不可以,不可以或者不支持 啊,这个重复重复定义啊,重复定义,重复定义啊,不支持重复定义好,呃,那接口,接口会,接口会啊,接口会, 然后还有一个啊,那么他其实这个他是支持这种啊,所谓的这种交叉定义的啊,这种,这个交叉啊,这个联合啊,应该叫联合,还有交叉啊,还有交叉,他都是可以啊,他都是可以的,所以这个类型别名啊, 类型啊,别名啊,别名,支持啊,支持这个联合啊,联合和交叉交叉啊,那么定义 好,那么这个呢?是,呃,告诉大家说他们啊,他们的一个用法区别 好,然后呢?哎,那可不可以混着用,就说这两个东西啊,他可不可以混着用?这个银子 face 和泰国可以, 可以啊,比方说呢,我写一个英特,英特 face i n t 啊, t 啊,这个 f a c, 然后呢,我给他一个 a a t 啊,这个 it f t f 给他这个,然后呢,我给他一个 a string st i n g, 好,那么这样写了,说给谁用?给 对象去用,对不对?好,那么当然啊,你刚才说这个东西是给对象用,但是我现在这样子啊,太好, typtyp 太好, 太否好,然后我写一个 a t y p 太否等于注意看。好,我就想用它里面的这个是菌,我可以这样用。注意看啊,可以这样用,这是格式哈,朋友们,这是格式,我可以这样用,我可以用它来。 什么意思?我就拿到了这个东西是一个什么试卷?也就是说我将来在 led str 好,那么等于啊,比方说是一个十号,我在这里面就可以利用用。谁用这个? a 态度?为什么?因为我这东西拿到的,呃,我这东西拿到的就是我们的使劲 就是我们的事情啊,所以混着用了啊,混着用了取他其中的一个,也就相当于说我可以在这里面保保啊,这个保存一堆的这些类型,对,保存一些类型属性啊,一些类型,然后呢?就直接 从里面去取,从这个接口里面去取类型来用啊,从接口里面取类型来用啊,所以这样是在干什么啊?这样是在干什么?我写一个啊,类 型别名,保存啊,接口上的某个属性类型, 用类型别名啊来保存用类型别名啊,来保存接口上的某个属性类型。我把它保,把它其中一个保存起来,然后我自己来用 啊,是可以的啊,是可以的。好,那么刚刚我们,呃,这个,呃,刚刚我们讲的这个,这个 这个东西啊,这个类型别名,说他支持这种啊,说他支持这种。其实我给大家这个再举个例子啊,比方说像刚才的,我们举一个比较长的吧,卡了,然后说我现在定一个卡的类型, 然后他现在这个看的类型可以是各种颜色,比方说他除了这种颜色他还可以,比方说是福禄 blu1 啊,红啊,这个古蔺,对吧? gr 一烟啊,都 可以啊,都可以。然后呢我还可以比方说,嗯,你可以任意的一个,比方说 steen s s t r r n g sing 啊,那么或者啊,这个并上,比方说随便写一个啊,好,那么什么意思啊?就说这个东西啊,一旦你在这里面去写的时候啊, let 一个 c, 然后冒号卡了, 等于好,那么他的值怎么样呢? red id 没问题吧?没问题啊,没问题,因为他这里面是怎么样?货货货货货货到这边啊,这个小号货起来,因为他这个优先级嘛,对不对? 优先起啊?优先起好,所以也就说其实这几个值啊,这几个值,当然这个的话是咱们啊随便写了,他不可能啊,是一个这个,且是一个这个啊,所以你就知道有这么样一个就行了,所以说他这个东西是支持这种啊,交叉联合交叉类型啊,他这个写法啊是支持的好,那么行,那这块的话其实就告诉大 家啊,这一节告诉大家说太和他的一个使用啊,以及他跟我们的 interface 他的一个区别啊,然后还跟 interface 了进行了一个连,用来给大家一点时间,把这块呢也给大家写一下啊,写一下。

如何描述对象?微信对,如何描述一个对象?我们看一下如何描述一个对象。你可能说对象,那是不是这样啊? 是吧?说我猜一个啊,你看我这个有个函数叫做查找函数啊,查找函数呢,我会传给他很多的关键词,这应该是个对象,是吧?你可能猜测说是不是就叫 office, 是不是这种类型啊?对不起,他会是一样没有这个,这个,然后或者是个大写的那个啊,这几个都不是,这两个都不对, 不管是小写的,大写的欧,其实你也可以用大写的欧去描述,但这个时候描述的是说明什么?是说我符合,就是你看大写的凹凸,他其实是有很多圆形方法,比如说 tousty 呢?比如说什么 case 啊?记得吗?我们当时便录的时候是有, 是吧?对这个圆形有很多方法啊,所以你如果大小 ok 的话,你只是代表那种。所以如果我真的想代表一个,说我要传一个这个大括号的这个对象格式应该怎么描述呢?哎,应该这么描述,这个你现在可能看起来有点晕,我稍微解释一下,首先是个大括号, 说明他是个对象哦。嗯,那你看他依然在描述他的形状,发现他首先描述的对,叫 stup, 就是开具嘛,对吧?就是结构嘛。结构,我们刚才也说是形状婚纱,他是不是在描述一个大概的对象的长得这个样子, 对象的特征是不是最外面就是这个大破号,然后呢,对象的另外一个特征是不是有个冒号,然后左边是他的 t, 右边是他的歪了,所以他也在描述他其实应该描述的是什么?是 t 的数据类型 和压力的数据类型,发现没有?嗯,所以怎么描述 p 呢?加上的功课啊?这个就是就是代表 t, 对,代表他的 p, 他说我是一个对象,这个描述其实还是一个有一些约束条件的一个对象,他的 p 呢,都是字母化形, 他的值呢?目前还约定他什么值,也是自助餐啊,也是自助餐,对吧?所以这个呢叫做 前面这部分,我们叫做锁影签名,就是对你的你的 t 的这个到底是什么类型的描述?是锁影签名,但是如果说我们更加泛泛的去描述一个对象, 因为泛泛描述一个对象的话,他的值也应该也可以是任何的一个数据类型吧?我不能只是自己画型啊,怎么描述呢?你看就是下面这个稍微小一点, 他依然描述了外面是这个形状,是大括号,然后呢,他在这个,所以签名这描述了,你看他说我的所有签名除了字符串还可以是数字七,还可以是我们上 ds 六最新加的这个 c 模型, 这三种其实都可以作为他的气的刺激类型,那么后面什么类型都可以他的词,所以呢?哎,出来一个叫艾米,什么类型都可以。其实我们想要描述一个对象的话,其实是应该是上面看到的第二行就是这样的。

上小节我们分享了一下这个为空,也就是前后端交互的时候,什么是空?你想想后端我接收到这个之后,我没有异议吗?他们都是空。那 你既然定义了空,那其他类型呢?哪些叫基本类型?哪些是集合我我可以支持的哪些 类型?你看,这类型里面是没有美局的。后端接收到一个美局之后,只需要它的 k, 那你所有的 k 不就是一个数组吗?自不出来数组吗? 好,这些都有了之后,你才可以去比较两个对象,哪些是新增的属性,哪些被删除掉了,哪些被更新掉了,哪些没有被修修改过。我要解析成一个 model 里面去,才可以 比较 d、 f、 f 这两个对象的时候,我会先把这些这些对象先解决成我的一个妈的叫贝斯,妈的,再把它变成他。最后你再 把这个 basemado 的值,再把它转成这个对对趣的这个对象。从一开始我们梳理 c、 r、 u、 d 的过程的时候,就会发现 这个是否为空,还有数据是否发生变化。他本身是个问题,就找了一些资料,包括现有的很多工具,我都查了,他解决不了我的疑问。那怎么办?问题足够小了,才可以解决问题。 怎么把一个对象转换成一个贝斯玛的?我们很明显 typescope 的类型系统有点乱,那我转成他是不是就可以让他变得清晰一些呢?很显然,这种 mpt 的这种场景下是是的, 可以看一下它的结果都就是 now avail type, 我决定叫 empty。 呃,其他的类型呢?也是类似的。好,下一小节我们再去聊详细的类型。

再讲一个题啊,把 ts 讲一下啊,什么是 ts 呢? ts 呢,我们称之为叫 type of script, 它是一个缩写啊。首先我们来明确一点啊,那就是我们 gs 呢,本身是一个弱类型音乐, 大家说了,什么叫弱类型,什么叫强类型,有弱类型就有强类型,那么比如说我们的是什么呢?常见的扎罗, cxops, 什么都是强类型,我举一个例子你就明白了啊,什么叫弱类型?点上一个哇, a 等于一, 然后呢,你可以给这个 a 附值,嗯, a 等于张三一二三,你会发现,哎,老师,这个,这不挺好的吗?我就喜欢这种想法,没有任何拘束,没有任何的反。 哎,这就是原来 gs 的逻辑这么显示,你们觉得 gs, 哇靠,真的比扎我好学啊,为随便什么东西都能复制,而且不爆错,这是他的好处。好处是什么呀?对于你们小小白来讲,对于我们的很多菜鸡来讲啊,这个知识简直就是成学的福音,也就造成了有巨大的垃圾袋网的一个生存空间。那所以说呢,他的优势 是什么呢?啊?优势就是好写是吧?嗯,好认写史上一般来讲,这个在码头都这么这么写出来的啊,略是什么呢?略,代码维护度低,编译没有编译啊,只有运行时啊,上线之后 才能发现错误,这是 gs。 那么为什么要比如 tsts, 怎么回事呢? ts 就相当于啊,给咱们的 gs 加了类型,添加了叫类型约束, 你不能再违背约束去复职了。打个比方,我们写上一个 ts 文件,这时候呢,我们艾特一个啊,咱们写上一个赖特啊,艾特一个 a 等于 四步串吧,写上一个 abc, 好,这时候呢,你给 a 付一个值,这时候事件是错误的,会包错的。为什么呢?因为你在给 a 负值的时候呢,已经是一个四步串类型了。然后呢,你把一个数值类型付给 一个字,不出来也行,这是不被允许的。那我们正常写在码头应该这么写啊,比如说赖他一个 a, 那么给这个 aa 呢?跟上一个,注意是冒号,冒号指示指的是我的类型。柱姐,咱们跟上一个 string 类型啊,咱们选择一个 abc, 同学们看好了,艾特一个 a 等于 abc 和赖特 a, 冒号 sky, 他俩是等价。你写了一个赖他 a 等于 abc, 因为他会根据你的初始职呢去反推你的 a 类型啊。这里边有一个类型的推倒, 他会推倒出你的类型是什么。所以说,当你去想尝试给 aa 副职的时候,你付不了,他会告诉你 string is not a sight。 吐一个 number 类型,这是不行的,他只能复什么类型?只能复一个撸串类型,总能吐 dfg。 那同学说了,老师难道就没有说又是字不串,又是数字类型吗?有没有?当然有。那么我们这时候呢,还有一个叫做联合类,联合类型,联合类相简单, 看好了啊,莱特 aaa, 然后冒,后面是什么? siri, 如果你想通过联合类型,就来上一个竖线,来上一个 number, 这时候呢,他就表示又是字母串,又是数字类型啊,你可以写 abc, 这时候呢,他也可以去给他复职,复职什么类型啊?复制一个数字,这属于联合类型,除了联合类型之外,还有一个数组类型,还有对象类型。 我要声明一个对象。怎么声明呢?看好了,赖他一个 obj 冒号后边呢? obj 他是一个大括号,是一个对象,我这里边就可以声明他里面有哪些字段,有哪些值,比如说我有一个 name, 是什么类型啊?是, 那么不好意思,你复职的时候你就不能给闹,也不能给空数组,也不能给空对象里边必须有个内蒙,还必须是什么字不串。老师,难道我不能给空对象吗?我就想给空对象怎么办?这里面他有一个叫可选链,可选给个问号就表示内蒙可以付,也可以不付。那我能不能付多余的呀? 不可以,你复个 a 的行不行?报错,这是对象类型。那对象类型呢?其实还可以,我们用自定义的态度去的,自定义一个类型,比如说 costum, 咱们就要写上一个啊, percent, 用自定义类型声明一个类似的,比如说内幕死追,这是自定义类型。 那么这时候呢,我们就可以服用他了啊,赖他一个 obj 一也是一个,怎么样? costume of course, 必须啊,有内幕对吧?有内幕或没内幕都行,因为他这里边写了一个问号吗? 自定义类型属于附用类型,那数组类型怎么说明呢?数组类型是这样,数组类型有两种写法,比如说我声明一个数组,它里边是一个 number 类型,我们说明一个 arin 冒号 number 类型,然后数组它只能是里面是跟上一个一二三四五,这是第一种写法,它还只是一种传范型的写法, 叫赖他一个恩瑞一,冒号是厄瑞尖,括号里边传入一个 number, 这时候呢,也可以等于一个四五六,这时候 是数组类型,数组类型,注意啊,数组类型两种方式都可以啊。这两种方式都可以,一个是咱们的 number, 跟上一个控制总一个是什么?我瑞建括号这种属于什么呀?范型写法,我要讲的其实不是这东西啊,同学们,我要讲的不是这个东西,我要讲就是什么呀?啊?就是我们未有三加 ts, 加上 瑞艾特家 ts, 瑞爱的户口加 ts, 他其实多个啥呀?就多一个发型,多一个瑞 r ef, 其他的东西都非常简单。现在这两个技术站应该是目前来讲前端咱们说天花板吧,也只能这么说啊,就是 vo, 三加 ts read 户口,在 ts 拿一个二十五 k 的薪资是没问题的。这是两个技术,目前来讲 前端天花板的技术站。好吧,这是 ts, 我们做一个简单介绍啊。 ts, 没听过的话,听我那个四天的课完全能听懂,都是些基本类型啊。

大家好,今天我们的视频主要是讲二零二,我们二零二主要是将上节课,我们通过三三个不同的视频里面采取嗯, 裁剪出的二十秒这样的一个视频,把这样的一个视频的一个 mp 四这样搞事,转成分别转成我们的 ts 这样的一个事, 首先我们就执行一下相应的一个命令操作, iphone 拍一个, 我们先 打印一下我们当前路径,当前路径的一个文件是 fi, 这样啊,指定的我们第一个 二十秒的这样一个视频文件,把这个视频文件我们的编码保持不变,保持不变 copy, 嗯,转成我们的一个什么样的文件呢?安全六十四,你看,安全六十四,我这里面的一个,嗯, 这把这样的 mp 四编码不变的情况下,他是爱情的,是编码格式,在上节课我们也看了,把这样的格格式转成我们的 ts 格式 是我们 ts 搞事,我们 ts 搞事,他有一个相当的一个参数叫 vbsf h。 六十四, mp 四叫什么?托 兔啊, nice b, 这个就是告诉你们,如果要转换成容器考试,如果说是 ts, 我们视频编码 气为密保二千六十四,那么我们可以,可以, 可,需要加此仓数,我们这里面所指的此,嗯,此仓数就是指的是 这个,指的就是我们的,嗯,这一段小马狗式,所以说我们现在就要微,嗯,我们得干 vbs, 干微 干杯滴 sf, 这个是我们视频 mp 四转我们的 ts 格式里面的 一个等一个参数,等于是视频参数,我们的格式是我们的 h n。 六十四, 安全就是干我们的 mp 四,我们这里面是这种纸箱的是 mp 四,错, 安安, nice, nice, nice b, 嗯,我们的文件输入,我们输输出文件,我们也是同样的,我们来个 one t s 问 mp 四这个文件是我们从从我们沙欧那个视频里面采取出来的一个二十秒这样一个视频,我们把这个二十秒这样的视频转成我们的一个 ts 文件,我们按回车 他就转成功了,转成功了,我们带领大家来分析一下,分析一下我们这样的一个音铺头,这样一个他是输入,输入文件,输入文件就是我们二十秒的这样 沙窝视频,我们看一下他的微雕,一个编码是二千六十四,他这是分辨率,嗯,这是我们的 fpt, 是每秒播放我们的三十针,嗯,这个,嗯,这些参数都是我们 这个参数是我们做 嗯,命令行做编码的时候,他默认的给我们参数,如果说我们用代码的话,我们这些参数都在我们自己去设置写到我们代码里面。 你看我们的音频板块,我们输入嗯的一个视频,我们的音频是 ic 编码格式,他走的是我们 ic, 他里面 嗯采样大小,然后这个是有一个默认的一个值, ft f 二 tp 这样一个模式,这是我们输入文件的一个视频和音频的一个编码格式。还有就是我们这个时间,时间就是二十秒, 二十点一二十秒,他有一个一针的这个差距,我们,嗯,那那有个空隙,我们现在看一下, 看一下我们奥特坡的输出,我们的昂弯 tsts 四米编码和一米编码,他是安全率是和 ic 是不变的,他 ic 他走的也是 ic, 他的编码,他的渲染搞视频渲染搞事,还是我们的 yuv 四二零 p 音频那个采用大小还是 四八零零 hr, 这是分辨率,分辨率是保持不变的,他唯一要变的的话,我们在这里面多了一个 q, 等于二减三十一,我们这个大小和这不变,我们的 ft f p s 不变,我们后面 这个就变成九十 k 了,他就跟上面的我们的 mp 四的是 默认的是有有所区别的。我们看一下我们音频,音频里面基本上是 是没有变的,因为这里面这种转板可是他以后跟我们音视频同步有关,因为我们音视频同步,他这种转板就是我们的 音频,这是我们的视频格式,伴随我们的音频进行一个同步,所以说我们音频进行转码之后,他是他的数据是不变的。 好了,我们清理一下我们当前的 ppwd s, 我们把下面的几个命令给转了,我们这里就是一个错, 我们因为后面我这个也为了生成素材,你第二个就是方便我们 进行一个操作, 我们现在就一起转了,一起转了,待会待会再进行一个播放一下,这都是我们在上面生成的一些素材,我们现在用这个素材来对单上面进行一个操作, 现在我们就清理清理下我们的终端 pwd, 在我们大家问一下就多了两三个文件,一个是 one t s, two t s 贴纸这样的文件,这样的文件我们可可以在我们的冰视频基础里面的一个叫 我们的实战这个素材,素材里面这万透视力这三个,这三个贴纸我们是可以利用我们麦克电脑下默认的这个 q 弹幕,嗯, plus 可以进行一个播放的,你看他也是一个二十秒,他只是一个转码的一个操作,他跟原来的数据, 嗯,原来的原来汲取的二十秒数据是一样的, 你看现在这一十二十秒, 第三个, 嗯,他也是二十秒。好了,我们这几刻 我们也可以利用我们的 fm 普拉给他进行一个播放看一下,看一下我们转码之后是否能够进行播放。他是可以进行播放的啊, 我们尝尝试一下就可以了。 i'm going to tell us drama king hello, 清理一下我们这节课的案例,主要就是嗯将 啊剪嗯剪辑后的二十秒视频,这数据转成我们的 ts 格式。 好了,我们这节课就讲到这里,谢谢大家观看我的视频教学。

还有谁不知道 ts 这个功能,来看看你知道吗?在 types cube 中使用太关键字创建自己自定义的类型,使用一个竖条使其成为联合类型, 允许其接受多个不同的纸,这很实用。但如果有另外一个联合类型,而且我们希望将两个组合到一起,就需要使用 ts。 四点一提供的新功能, template literal taps 使用模板语法将两个类型添加到其中,这时就可以直接使用这个类型定义数据了。