这一节我们来学习 private, private 和 protected 一样,但不允许从此类中访问该成员。另外 type script 允许跨实力的自由访问,我们通过代码来诠释一下 返回代码,我们在 s r c 下面创建一个新的文件,十四 member with the ability private, 点 t s。 接下来我们来去构造一个类,取名为 base, 在类里边,我们通过 private 去定义一个属性 x, 我们把它的值设置为零。那接下来呢,我们来看一下这个属性它的访问情况。我们在 类的里头定义一个叫做 print x 这样的一个函数,这个函数呢,我们不写任何的修饰符了,因为它就是 public。 然后接下来呢,我们在里边去试图打印一下类似点 x, 我们发现是可以访问的, 也就是说通过 private 私有的这个修饰符,修饰的成员在类的内部是可以访问的。接下来呢,我们来去定义一个子类叫做 derived, 它呢去继承自我们的 base, 然后在里头呢,我们声明一个叫做瘦 x 这样的一个方法,这个函数呢,我们也不加求数符表示是 public。 关键是我们来试验一下,在子类里边,我们能不能访问它的这个私有的属性 x, 我们访问一下,发现果然是有问题了,我们看问题是什么呢?属性 x 为私有属性,只能在类被子中访问,所以子类是不能访问鸡类里边生命为 private 私有的这样的一个属性的。 那么接下来我们再来看一下实力,我们可以 cost 一个 d 等于 new 一个 derived 这样的一个实力。然后呢,我们试图的去打印一下 d 的所谓的 x, 我们发现呢,仍旧是不能访问,因为 x 是私有属性,只能在贝词中访问,那也就说 一个私有属性只能在类的内部访问,是不能在子类和实力上访问的。另外我们再看一个知识点,那跨实力 私有访问允不允许呢?其实不同的 oop, 也就是面相对象的语言,对同一个类的不同实力,是否可以访问对方的私有成员,有不同的处理方法。 像 java, c, shop, c 加加、 swift 和 p 是 p, 这些语言呢,是允许我们跨实力访问 c o 属性的,但 ruby 是不允许的。那 type script 可以吗? type script 是允许的,我们来做个实验,下面我们把这代码先注视一下, 然后我们去定义一个类,名字叫做 a。 在类的内部呢,我们定义一个 private 这样的一个属性 x, 它的默认值是十。 然后接下来呢,我们在这个类的内部再去定义一个公共的方法,我们取名为叫做 see us, 这个函数我们要传递进来一个新的参数,我们取名为叫做 other, 它类型呢,就是当前我们这个类的类型,那很显然,这个 other 呢,是我们当前这个类的一个实力,或者说是另外的一个实力。那接下来呢,我们来让这个函数 返回 other 点 x, 但是呢,我们要返回它的一个所谓的 las x 的一个比较。 那很显然,这里我们发现呢,在 ada 里边,我们是可以访问到 x 的,也就是我们在一个类的里边是可以访问另外一个实力的一个属性的。当然这个 x 一定是 private, 因为它的类型也是 a 嘛。好,至此呢,我们 成员的可见性就讲完了,我们一共讲了三个可见性,一个是 public, 一个是 protected, 一个是 private, 他们仨呢?可见性依次缩小, public 可见性最强,它可以在 lead 内部、子类以及实力上访问,而 protected 只能在 lead 内部和子类里访问。实力是不能访问的,而 private 只能在 lead 内部访问。下一节我们来学习静态成员。
粉丝5812获赞1.8万

哈喽,各位观众朋友们大家好,今天我们来学习这个泰普斯科普这个第十六章。嗯,内部 space 密于空间,那我们在工作中呢,是无法避免这个全局分量造成的这个污染。那泰普斯 coup 者是提供了这个内部斯贝斯,帮我们解决这个问题。 ok, 让我们来写一下这个例子。 比如说我在这个 nice ts 里面声明一个 cos 的 a 等于一个一,然后呢,我再去这个二里面也声明一个,这 cos a 等于一个二啊,他俩是单独的文件,就这两个文件,他这个名字是不一样的。但是我们可以划到这上面, 他说我在这个应该是 ts 已经声明过这个 a 了,那此时这个 a 的作用率呢,是全局的,那不受这个文件的限制了。 ok, 让我们来看一下。 呃,如果你这文件包含这个音炮的,或者是一个炮的,他会当成一个模块 啊。如果你不写这个东西呢,他的内容呢,将视为这个全局的。 ok? 所以我们为了解决这个问题呢,可以加一个这个,一个一个 pose 啊,把它导出成一个,这个局部作用也就是一个模块。那这样呢就可以解决这个问题。那另一种方式呢,可以通过我们这个秘密空间去解决。 比如说我在这来一个 name space, 那通过这个,然后后面的跟一个名字,比如说我们叫这个 a, 然后呢,我再找出我们这个康斯特,可以等于一个一。然后呢,我们在这个二里边可以搞一个 name space, 一个 b, 这样子,一个 pro 的 cons, 一个 a 等于一个二,那这样子也是没有问题的,他们两个也是互不干扰。 ok, 那我们就是使用的时候是怎么用呢?比如说 烙一下,那就是通过 a 点,然后这个小 a 啊,就是堵下面这个啊,这个东西他会被编成一个对象,然后呢其实这个东西他就是包了一层,这个方式我们可以把它编一下看一下, ok, 对他就是其实就是包一层方式,然后呢是一个对象,然后把这个里边这个 a 呢付给这个对象,然后就输出出来了,那他其实就是这样子的, 然后我们要去这个 cd, 这个 d 下面通过这个 note 应该看看这个底下啊,这个就是这个 a, 那这个呢就是这个秘密空间, ok, 然后呢我们再来介绍一下秘密空间的其他的一些东西 啊,比如说这个欠套的秘密空间啊,什么意思?就是我里边还可以再写一个,比如说我 export 的一个内部 space, 一个 c 啊,这样子,然后呢我在 export 一个 cost d 等于个五啊,它可以嵌套, 那这时候我们就得改成这种 a 点 c 点 d 啊,去给他取这个五,那这是欠套的命运空间,那我们再给他编一下, ok, 他其实就是又给你套了一层这个方式,然后呢再去给你点这个地啊,然后让我们来运行一下, 那就是这个五, ok, 那这个呢就是嵌套秘密空间的用法啊。然后让我们来看一下这个啊,抽离秘密空间,就是比如说我们这有一个这个币,然后呢我们把它可以导出, 然后我们使用的时候呢就可以通过这个放音炮, 这个点杠,然后呢这个 b, ok, 这样去使用 也是可以的,就是可以把命名这个命名空间抽离成一个文件,那然后我们可以给他编一下, ok, 然后编一 出来了,然后我们给他运行一下。 打错了 啊,弄得 gs 不认识这个底饭,那么就给他编成这种 comen gs 啊。这个结丝是遵循这个敲门结丝的,然后重新给他编一下, ok 啊。这个呢,就是把那个秘密空间处理成一个文件,那然后我们来看一下这个。呃,简化秘密空间, 比如说我想取一个值,太麻烦了,你看我要点这么多,一点 c 点 d, 那这样才可以点的到。然后我们可以给这个秘密空间起个别名,通过这个音炮的这个关键字,比如我给他叫 a, 他就等于这个 a 点 c 点 d 啊,通过这种方式去给他起名字。或者我就直接 a 点 c, 然后我再通过这个 a a, 再去调这个 d 啊,这种方式来预泡它,然后我们再把它编一下, ok, 然后我们再去这个 dose, 然后我们来运行一下 啊,一样的,其实也是五啊,这是通过音炮的去给他重新命名去。然后呢,发现他这里就是搞了一个变量, ok, 那注意一下,是这个东西呢,是不可以通过 ts no 的区分运行 ts no 的声不认识这玩意啊,我们可以试一下。 对他,他不认识这个。所以说我们可以把它变成解释。去看一下啊,这是秘密空间的别名,然后 再看最后一个是这个密密空间的合并,然后重新写一个 name space, 一个 a, 然后比如说一个 come 特,一个 b, 等于二, 然后呢,我再搞一个内贝斯,一个 a, 那这俩名字一样,然后呢,我的一个是 poss 的一个 d 等于三,那其实这个跟一特 face 一样除名的话,他其实就会把这两个字合到一块,那就相当于什么呢?他就相当于这样子 对他就等于这个。那你如果重名的话,他其实就是这个意思。然后让我们可以试一下,比如说我们 通过 a 点,你可以看到这个 b, 或者是这个 d 啊,这两种。 ok, 那以上这些呢?就是全部这些秘密空间, ok。

我这段代码怎么报错了?还有个函数接收参数是 get 或者 cos 头生命了一个变量,呃,指的是 get 字符串,把这个变量传进去,非常的符合逻辑啊,为什么报错了呢? 把鼠标移上去,看到他提示说 the dream, 哎,不能复制给 get 的字符上,或者是 post 的字符上,这是什么意思呢?鼠标移到这个 mess 的上,发现 ts 把 mess 的给我推断成了一个字符串类。题,没有精确的匹配到是一个 get 字符串类型,怎么解决这个问题呢?改成 const 的生命,它就是一个常亮,就推断成了一个 get 字符串。我们来看第二个例子,同样的有一个函数,它有一个参数,参数要符合 u i l 是字幕串, mess 的是 get 的字幕传或者 post 的字幕传。我身边的一个常亮, u i l 是字幕传, mess 的是 get 字幕传,把它传进去,怎么也报错了呢?我用 cos 带来声明的,怎么还报错?不要移到 mess 的上面。我发现他把 mess 的这个属性给推断成了 string 类型,那么怎么让他把这个推断成 get 自主穿类型呢?我给他加上断眼,这时候发现他就更长了。


在学习 type of script 之前,我们先来给大家做一个 t s。 的整体介绍, 我们先来认识一下什么是 type script。 说起 type script, 我们必须得先聊一聊 javascript。 javascript 在引入编程社区这二十多年来呢,现在已经成为有史以来应用最为广泛的跨平台语言之一了。 javascript 最初是一种用于像我们网页里边添加一些微不足道的交互性的小型的教文语言。现在呢,已经发展成为各种规模的前端和后端应用程序的首选语言了。 虽然我们用 javascript 编写程序的大小范围和复杂性呈指数级的增长,但是 是 javascript 委员表达不同代码单元之间的关系的能力却没有,这就使得我们 javascript 开发成为一项难以大规模管理的任务。 那程序员编写最常见的错误类型呢?就是类型错误,也就是在预期不同类型纸的地方使用了某种类型的纸。 这个错误可能是因为很多的原因导致的,比如可能是由于简单的拼写错误以及无法理解酷的 api 而导致的错误,或者是对运行时的行为的错误假设等等。 那该如何解决这个问题呢?现在流行的解决方案就是 type scrip, 大家看到 ppt 上的这张图就是 type script logo。 type script 的目标就是成为 javascript 程序的静态类型检查器,换句话说是一个在代码运行之前运行的工具,我们可以叫它静态编译, 并且呢能够确保我们程序的类型正确或叫做类型检查。那 type script 是由微软开发的自由和开源的编程语言,它是 javascript 的一个超级, 而且本质上像这个语言添加了可选的静态类型和基于类的面相对象编程等等。 type scribb 是一种非常受欢迎的 javascrib 语言扩展,它在现有的 javascrib 语法之上加入了类型检查这一层,而这一层即使被删除,也丝毫 不会影响运行时的原有表现。在 npm 网站上面, typescript 下载量每年都在翻倍。截止二零二一年十二月一日,它的每周的下载量已经超过了两千两百万次。 而在去年十二月,这一数字约为一千两百万字。他仍将保持着高速的增长趋势,没有任何放缓的迹象。 从二点零版本开始, type script 每两个月会定期发布一个 release。 但是现在呢,它放缓了发布节奏,改为每三个月发布一次, 其中花一个月的时间来编写新的 features 并发布 bet 版本。剩下两个月对 bet 版本进行测试和 bug 修复,这就是的后续的发布 更加稳定。综上所讲呢, type of script 不是 javascript 的替代品,而是会使 javascript 前进的步伐更坚实,更遥远。

学好 ts 的六字秘诀,想要学好 ts 的,有一个误解你一定要解开,所以千万不要划走,否则这个误解会让你对 ts 的学习时间至少增加百分之五十六点二八。 在学习 ts 的小伙伴们肯定是已经掌握了 js, 而且呢,还可能是已经比较精通 js 的人。 ts 给大家的第一印象应该是很强调这个 t type, 也就是类型。 ts 通过给 js 加类型标注的形式,限制住类型,不能随意的变更了。一开始的时候啊,还是挺顺利的啊,只要在这个变量定义的时候多写个冒号,增加类型的标注就可以了。 比如这个变量 name 应该是自负串儿,那就标成 string price, 价格是个数字,那就标成 number, 很自然, 很合理,没毛病。但是接下来啊, ts 给你抛过来一堆你在 gs 面没见过的类型,爱你啊啊 no 啊 never 一个比一个奇怪, 特别是这个 never, 你一查官网, not 类型表示的是那些永不存在的值得类型啊,一个不可能存在的值得类型, 那我为什么还要写呢?我写了不就存在了吗?如果这也是你的困惑,评论区里发我也蒙了,干货来了。我现在啊,就把我自己领悟出来的一句话,放在这 ts 中的类型,并不是 gs 中的数据类型,而是类型的可能性。我当年自己琢磨出这句话的时候啊,我自己都兴奋啦,核心点就是类型的可能性,就这 六个字,老值钱了,我都想去申请个专利了。这六个字啊,应该表起来挂在墙上,应该在 cbd 的大屏幕上反复播放。 你把这句话理解了, ts 后面的很多概念都迎刃而解,我一定会把这句话放在正在筹划制作的领悟 ts 精华课里面。不过今天我先不着急解释, 给大家一天琢磨的时间,自己要是能琢磨出来了,印象会更加深刻的。要是能够琢磨出来的,赶紧在评论区告诉我,回答正确的我就会送你一个 大大的赞,看看我朱老板的粉丝是一个什么样的水平啊!好了,关注爱写代码的朱老板,让你离程序员的圈子更近一些。

这一节我们来学习 type screen 另外一个常用的类型数组。数组的定义方法有两种,第一种就是在一个中括号的前面加一个类型。 第二种方法是使用大写 a 开头的,而瑞这个关键字后边加一个间括号,里边写一个 ts 的常用类型。 注意这种写法呢,我们称之为范型的写法。我们在后边会详细的讲解范型,其中这里边的 tap 是任意合法的类型,那我们用例子来演示一下。 回到代码,我们在 s r c 里边创建一个新的文件,我们取名为零二 arry 点 t s。 这里我们定义两个数组,第一个数组我们取名为 a r r, 它的类型我们用第一种方法,我们前面呢可以写一个任意的类型,后边加一个空的中国号。后边呢,我们就可以复制了,比方说我们要复制成一 二三,那这个类型告诉我们数组里边的每个元素都必须是 number 类型。 假如我们现在把这个 a r r 这个值给换一下,那么我们让 a r r 等于另外一个数组,比方说我们写的 a 好,大家发现这就出现了错误,为什么呢?他告诉我们不能将类型 string 分配给类型 number, 因为我们规定这个数组里边的所有元素的类型都是 number 类型。接下来我们用第二种 定义数组的方法, let 一个 a r r r, 它的方法呢是使用一个大写字母 a 开头的一个 erray 对象。后边呢,我们使用一个间括号 建括号的里头写我们数组元素的类型。比方说我们写个 number, 那后边呢仍就是可以去复制一 二三,同样我们也不能够给 a r r 二去复制其他类型的数组或者是其他类型。比方说给 a r r 二复制一百是不行的。 给 a r 二复制一个空的数组确实可以的,因为我们这里可以把这个数组的元素置为空,那这个空的话,其实事实上我们认为是没有值的,那你只要是 不写非法的值就可以了。但是如果你在这里边写一个 a, 那还是非法的,跟我们第一种对应方法是类似的, 这就是数组的定义方法。在下一节我们来介绍 types group 一个常用的类型 any。

哈喽,各位观众朋友们大家好,今天我们来学习这个泰普斯,会不会这个第十八章生命文件啊,也就是这个地点 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, 那以上呢就是这些生命文件的知识。

嗯,这两天聚焦在这,然后这个整理一下,就是这个,特别想写这么一件事啊。然后 啊,首先就是说这个变音器呢,它是有个目标语言的,上编语语言在哪, 要的是变异也好啊。金哥, 我的解释从目标里。然后我们这个是 线的语言呢,用的是 type three, 进入幺二零三。然后边一起补掉这个吧。 几个阶段。 首先是是此法分析, 策划分析,输入的是原码, 突出的 token 送到了头盔系列 这种删除。然后这个头根序列呢,其实有几种方式。关于头根序列 for it, 比如说标识符 tok 序列。其实什么 tok 序列啊,输出的是 tok 序列,那么 tok 呢? 是一个圆组。然后是 吃个串,以及它的类型。类型那跟我们正常那个呃,以翻译为例吧,就是我们将每一个词在这个句子中,它的意思一个词性也好啊。 嗯,然后再进行区分,就是我给了一个尺,一个字符串,然后给了一个类型。呃,那么关于这个字偷坑的类型, 放个石榴, 嗯,比较舒服。 雕塑符呢,是一个开放的集合。然后是一词一词一个类型吧,比较 一尺一码, 因为你标志符的话就是说呃, e c 嘛,比如说例如 这种定义这些负啊, bu 这些变量。然后这个叫呃界限符吧, 就是一些符号,比如表达一些括号啊,分号啊,表示结束,表示边界, 给代码带来城市是吧。 然后就是操作, 操作服呢,也是啊,这个也是 e c 码。 土豆福利撸关系操作 逻辑操作符以及运算操作符。其实这个还是标志符,还有个 羽翼信息,就是他具体的一个含义。然后就是静态病变,静态藏量,藏量也是开放,结合标数分一尺一码,多尺一码 开放了吧,你不能穷尽所有一码,多此多此一码啊,这也是多此一码。类似于。 然后今天期我们就要做语音分析了,就是你形成了一个一个句子,然后你还要进行语音分析。 这里面我们去实现了扫描器 扫描 原码 t 恤头盔序列 赋予这赋予区的一个结构化,生成 st 抽象。 没法说 这有解解实现的。解析器 对此法分析 进行分析。 首先我们去生成一个我们来定义,因为他是个塑形结构嘛,是吧,塑的塑形。 我们需要定义节点,输上每个节点。 那这个节点呢?会有类型, 这个类型 也就是罗列出一些 such 来表示 程序起点 数据,数值 数字与一节点 标识符。 这个棋我们最后会我们先关注这个操作表达式。 我们其实的话 这个表达式其实 我要形成一颗这样的树啊,这样的树 应该用到后续 blay 吧,这样一个二叉数。 我们先因为这个现在啊,语法比较简单,就是我们逐渐的去实现,只现在就是一个这样的一个简单的副词语句。 让我们去具体实现一下这些类型。 我上一次输出的就是这样式的透根序列是吧? 程序其实是由一个一个语句组成的啊语句,比如说副词语句啊,要运算。 让我们去把这些偷根拿来之后如何去去解析这些语句。每个语句都表达一个含义,就像我们翻译一样,我翻译一个语言的话,我们肯定是要知道这个语言里面每一个词在这个是主语啊还是谓语啊还是宾语啊? 然后这样我们拿到一枚每个词积极的词性,我们还需要给他组合成语气来表达一个具体的含义。 interface 这个就是 statement 的一个缩写,你给他一个类型啊,类型的话就是 note time。 我们这个程序节点的话,它是有一系列语句所组成的。所以我们呃它有一个另一个属性叫 buddy, 就是它是一个 statement。 the 底层不是吸,底层是这个 type c 瑞以后感兴趣我们会用这个吸去吸。我们以后可能还会用其他语言,比如说主要是为了熟悉语言和语言的怎么去实现一个语言。 go long rust 当然少不了家吧。 小包 c c 香香 peace peace statement 是一个抽象的类对吧?它就是固定表示我们一个 statement, 它会有一个类型。那这个类型是一个什么样的一个 statement? 一个程序是一个啊, item fire 还是 binary expression? 那表达式啊,还是一个 program? 那么具体的话,每一个节点都是继承于这个,这是一个结构。 在我们现在设计的程序中,这个 statement 它不会返回一个没有返回, 但是在这个 rust 的一种语言。在 rust 的。比如说我们去可以去啊, x 等于 if, 嗯 b 负 a 大于零啊。 expressing nice expression 父子语句的话会返回 一个返回一直复制给变掉。但是对于 statement 的话,我们会。 我们知道 ras 的每个语句他都是会有返回,返回指导。这个是嗯其他语言中嗯不会支持的一个语法现象。但是 the rest 的里面就是一个 expression, expressions 会表达词,会是有反馈词的,对吧?我们写一个表达词,肯定是会有反馈词。 那么第一个 expression, 那后座的话,由 expression 的话就是显示 expression。 它是不有返回键,也运算 this person, 它也是继承一 stem, 它也是一个空的一个样。就是这个阶段。 其实呃, expression 是可以组合的嘛。 expression 嗯,这里面儿可以是一个两个数相加,然后一个操作符 left, right, 然后操作符,然后得到 一个值。这个值呢,又形成一个更大的一个表达式。在这里。在这个 我们用一个 bandwid 就是二叉数嘛,是吧?二叉数他肯定有一个 rex, 那左侧也是个表达式。其实你一个词也是一个表达式是吧?一个变量其实也是一个表达式。 嗯,他左右的节点的类型呢,也都是表达式。 now opera operator 它是个 stream one little, 这个就是个 bannery expression 别乱说。 这个就是一个是一个字符的寓意对吧?这就是我们定义一个字符的表达式。 因为这个 left, right, 这个 ideas and fire beautiful, 它也是一个 expression, 所以它继承 expression。 我们这种没有给他类型。 i know i didn't take fire 也可以这种啊。 没有一个 number 他这个是的。 in surprising smith 为什么保证书 interface and for little can't 接口错误困扰了。 express 看的类型不兼容。 这个就是那个 type suv 的好处,他能帮你去检查,预防。 到现在为止,我们就就是定义完了所有这个。 那到现在为止,我们就把所有这个 g d 类型都定义完事。

hello, 各位观众朋友们大家好,今天我们来学习 typescript 第二十四章 ts 的境界用法之返行工具。啊,那返行工具呢?是 typescript 提前帮我们去内置好的一套工具, 不需要引入,直接呢就可以使用。他呢,主要是帮助我们去编写更灵活更通用的代码,以及提高代码的可读性和可维护性啊。 那么今天的话,大家一共会学到这五个常用的发型工具。然后我是定了一个接口,然后名字为 user 里边有三个属性。好,那么先来学第一个 partial, 那 partial 的意思呢?其实就是把 interface 里边属性变成是一个可选的意思,注意,是所有属性。对,是所有属性。好,那怎么把它变成可选的呢?我们先讲 挂,加一个问号是不是就可以了?对,他呢就会便利这里边所有属性,在每个冒号前面都加上一个问号。对,那么他呢就变成一个可选的了。好,我们先来用看一下他的用法。对,其实很简单。 对,这个 pass 呢,直接就可以用。对,直接用就可以了,不需要引入直接用。然后他呢接收一个范型。对,接收一个范型啊。 好,那这个发型里面所有的属性呢,他就会变成一个可选的属性。好,我们来看一下。对,都加上了问号,说明他已经变成是一个可选的了。对,这个就是他输出的一个结果。 对,就是便利下这里边每个属性,然后前面都加上一个冒号。啊,我们来实现一下它的原理,那它的原理也是非常简单啊, 然后把这个 parsle, 然后给它粘过来, 要给他接收一个发型。对,然后我们需要去便利一下他里边属性,那便利的话怎么便利的?我们先讲,哇,需要一个中括号,就跟否定是类似的,但是否定我们是不是要自定一个 q 名啊?这个也是可以,比如我们就随便起个名字,比如说叫 p, 然后呢,通过英语操作符, 但是这个硬操作符后面只能接收什么呢?接收联合类型,那怎么把它变成一个联合类型呢?哎,直接使用 tof 一个 t 不就可以了吗? 对,这样的话不就变成一个联合类型吗?那么就会读到 address, name, 还有 age, 哦,他就会便利这三个东西了。然后呢,我们把它加上一个问号不就可以, 那这样它里面属性不就是可选择了吗?这样的话只是便利的 k, 那这个 value 我们还没取呢, value 怎么取?通过 key value 的方式直接把它取出来不就可以了吗?好,让我们来看一下效果。 哎,发现是不是也是一样的?对,所以说它的原理呢,就是通过这种方式去实现的。好,那这个就是 partial, 把里边所有的属性加个问号,也就是变成可选的一个意思啊。然后我们再看这个 require 的, 那 required 跟它正好是相反,就是把里面所有属性的变成一个,呃,必选的。好,我们先把它变成可选的啊,不然看不出来效果。好,然后使用 required。 好,我们再划上去看。哎,是不是问号就没有了,那么 top 就变成一个必选的了。好,那这个东西他要怎么去实现呢? 哦,这个东西,哎,很多就会说,哎,老师,我直接把这个问号给大家去掉行不行?好,我把它去掉,我们再换一下,好,来看一下,来,发现是没有效果的。对,直接把问号去掉呢,是没有效果的。那怎么去呢?那很多人又会说,老师, 那我直接把这个问号给他删掉行不行?行,那怎么删呢?哎,这么删,加一个减号给他删掉,我们再来看一下,哎,是不是就可以了?所以说他需要使用这种语法,就是一个减号把这个问号去除掉的一个意思,那么这些属性呢?就会变成 必填的了,就是必选的意思了。那这个话就是 require 的一个用法,就是把所有的属性呢变成一个必选,然后必须使用这个减号问号的方式去排除掉这个问号,它呢就会变成这个必选的了。好,然后我们再看这个 pick, 那 pick 的话,它就是提取的意思。对,去 提取里边某个属性,比如说这边属性太多了,我可能用不着,我可能只用到内,或者是 a 值。对,就是举个例子,可能只会用到这两个属性,但是呢,我又不想重复的去写这玩意,对吧?那么就可以把它提取出来。好,我们来试一下。 然后这个 pick 呢,是接收两个范型,注意是两个范型,第一个就是我们要这个传入 interface, 第二个就是它里面属性,比如说我想提取 age, 好,鼠标划上去, age 是不是提取出来的?它支持联合类型,比如说我还想再提一个,提个内容 来,鼠标再画上去。哎,这两个属性是不是就提取出来了,就不用呢?重复去编写这个 interface 了?对,直接提取出来也可以用,是完全没有问题的。好,那么它的原理又是怎么去实现的?其实也是很简单。好,然后我们就需要接收两个类型了,然后这个 类型作为 t 类型的子类型,所以说使用 extent key of 一下这个 t。 好,那么既然有了这个 key, 那么就不需要去 key of 去便利它了,那么直接用来 key 就可以了。好,直接把它换成 key, 其实就已经实现了。这是 custom pick。 好,给到他来试一下。好,鼠标滑上去, name 跟 age 是不是提取出来的?对,没有问题,然后我们可以把这个给它去掉。对,这样就原汁原味了啊。 对,就是加上这个可选的,当然你也可以再做一些别的事情,比如说提取的时候呢,我还想把它变成一个 read nully, 也是可以的。对,你可以自己再给它修饰一下,也是没有什么问题的。 好,那这个的话就是一个 pick 的一个原理,就是提取你想要的属性。对,没有问题。 好,然后我们再看这个 x 路的, x 路的呢,它是排除部分属性。注意,它排除的呢是联合类型,它不是这个 interface。 好,我们再来看一下这个 x 路的。 对,它排除的是联合类型。就是怎么玩呢?就是比如说我有一个 a, 对,我有 a、 b、 c 这三个联合类型。那第二个范型呢?也是接受一个联合类型,比如说我想排除这个 c, 那排除这个 c 只剩什么呢?只剩 a b 了。好,来看一下。 哎,是不是只剩 ab 了?对啊,比如说他也可以支持联合类型,比如说我还想排除掉 a, 那么就只剩一个 b 了。对,他是通过两个联合类型去排除掉你不需要的, 我不想要 c 和 a, 那么呢,就只能是剩下一个 b 了,那这个的话就是一个 exclude 的一个用法。好,那我们来编写一下它, 它的原理,它的原理其实就一行代码,我们叫 custom exclude, 他接收两个范型。对,他是接收两个范型,一个 t 和一个 t 啊,如果 t 能包含,对,能包含这个 t 呢?返回一个 never, 否则呢,就直接返回这个类型就可以了。 好,我们给到他来看一下,那效果是不是也是一样的?哎,很多就会问,哎,老师,为什么是 never? 那不能是别的吗?比如说我给个 on no, on no 行吗? on no。 好,再看一下。哎,他就返回 on no 的, on no 显然是不行的。哎,那为什么只能是 never? 哎,这个问题是不是很奇怪,为什么给 never 它就排除掉呢?好,来看这么一个例子。 好,这也是一道面试题啊。哦,那很多人就会问,这个 test 二最后的结果是什么呢?其实只有 a b, 注意, never 在联合类型中会被排除掉的。 对,注意啊, never 在联合类型中呢,是会被排除掉的,所以说它其实就是把这个 c 和 a 变成了一个 never 了,然后只剩下什么了?只剩下这个 b 了。对,就只剩下这个 b 了,就是变成这样了。 对,就是变成这样了。但是呢,这个 never 呢,在联合类型中又会被排除掉,所以说它的结果什么呢?它的结果不就是一个 b 吗?所以说这就是它的一个原理。对,这个就是它, 它的一个原理,其实就是这样子的。好,那这个的话就是一个 exclude 的一个用法。我们再看最后一个 a mat, 这个 a mat 呢?它就是去排除这个 interface 里边的属性的。我们先来看一下用法。 好,这个其实应该跟 pick 是正好是相反的。对,比如说我想排除 age。 好,来看一下,只剩下 dress name。 对,他也只是联合类写,比如说再排除一个 name。 好,再看。哎,只剩下一个 address, 对,它跟 pick 呢?正好是相反的。好,那这个东西怎么去实现呢?那这个东西呢?需要武魂融合剂去实现, 也就是这个 x l 和这个 pick。 对,这两个要融合 合系融合一下,首先我们需要用 x 六的去排除不需要的属性,然后再用 pick 对提取剩下的属性,那不就完成了吗?那首先需要 excel 的,比如说它传了内,那把内容的去给它排除掉。排除掉,那只剩下什么呢?只剩下 address 跟 age, 那用 pig 再把这两个提出来不就完事了吗?对不对?所以说需要一个武魂融合集, 我们来实现一下 tag, 然后他是接收两个范型 t, 然后第二个范型是这个 t 类型的子类型。 ok, 然后我们先用 x 六去给它排除的,但是 x 六的针接受什么呢?接收联合类型,所以说我们还得 key off 一下 t, 然后 key 的话就已经是这个。 呃,联合类型。好,这样的话就排除掉了,排除掉的话再用 pick 去提取剩下的。好,再来一个 pick t, 然后提取剩下的就可以了。 好,那这样的话应该就实现的话,我们来看一下,看一下效果啊。好,排除掉 age, 那么就只剩下 name 跟 address。 好, 鼠标划上去 adjust name。 对,他其实就是通过这种方式去实现的,当然也支持联合类型,比如说把 name 也给排除掉,那么就只剩一个 address, ok, 那以上的话就是本章所有的知识,那知识比较多,大家下去好好练一下, ok。

哈喽,各位观众朋友们大家好,今天我们来学习这个泰博斯 cove 这个第十七章。嗯,三斜线之令。那三斜线的这个东西呢,顾名思义他就是三个斜杠后面的跟一个标签,然后这个名字叫这个 refense, 我跟一个 pass 呢,里边是个这个路径,那你也可以把它理解成这个一炮,就是导入这个文件, ok, 让我们来写下这个代码。 然后呢我现在是有三个文件,比如说我在二里面搞一个咱们昨天学的这个啊 namespace, 然后搞一个 a, 然后导出一个这个一个泡软杠的比较一吧。然后大家可能在工作中呢,这里面写的一些逻辑可能比较多,然后也是封装成这样, ok, 然后呢我们在三里面也写一个,写个 b, 我们等于这个五,然后呢这个里边呢也可能做一些封装的逻辑,然后呢最后呢他们可能会在这个阴袋子里边 去用啊,用的话我们就会通过这个三斜线指令去给他引入,就是杠杠杠,然后一个 reference r, e, f, e, r, e, n, c, e 这样一个 pass, 然后一个抖音号,然后一个杠啊,这种方式, 比如说我们要以这个二, 还有这个啊三,那这样子我们就把它引过来了,然后呢比如说我们再写一个 a, 我给他找出一个 c 啊,六六六,然后其实我们这时候呢已经可以读到那个 这个二文件里边这个 a 和这个三文件里面这个 b 呢,直接就可以用了啊,你用了就直接可以用通过 a 点这个 a, b, c, 那都可以,然后让我们输出一下,那其实就跟那个你泡着差不多这意思,然后我们可以把它编译成一个单独的文件,我们就不编,不编这个三个文件呢,我们可以通过这个 ts 考飞一个, 然后这个是 小凹凸费用。对,通过这个凹凸费用,我把它编到这个栗子下面,这个应该可能有点结实,我给他们编一下,因为他已经编到这下面了, 发现了他们都打到这个包里边了,然后呢这个东西他还在别人恶心,这时候我们应该把这个人物为 come 这个东西给他加上,把注视给他删掉,那我们重新 边演,我们需要把这个文件先给他删掉。 ok, 那这样编出来就没有了。那然后我们可以看到,那这是那个 a, 这是那个 b, 这是那个 c 啊,都给他打到一块了。 ok, 然后呢他还可以做什么事呢?他还可以引入我们这个生理文件 啊?什么是生命力呢?可可以看一下。 然后呢?比如说我这给他换成这个太, 那我们需要装一个依赖,比如说装一个这个 no 的 gs 的生命文件,那一般生命文件都是通过 it type 杠后面的包名,然后我就装一个 no 这样子去给他装一下, 然后我们这里边呢填一个 no 就可以了,他自己就会去那个 nono 的下面那个爱的太子里边去找,然后呢其实他现在就已经找到了,然后呢我们可以通过烤串然后加点,就是把点一下 就可以看到他这个文件里边,他就去找到这个 intex 的这个 d 点 ts, 这就是生命文件,其实他这个生命文件呢,也是通过这个三谢限制力去导入的其他的文件啊? ok, 那这就是今天主要讲的这个三谢限制力。