粉丝208获赞4.6万

啊,这个系列呢,我会给大伙聊一聊这个关于 t s 的类型演算。呃,首先是个 t s, t s 呢,我相信只要你工作过,那么你肯定是会的,只是呢,会的多和会的少的区别。首先要聊这个类型演算的话,你首先得大致的知道一个 t s 目前是一个什么样的状态。嗯,这个东西呢,有人爱有人恨,其实我观察下来的话, 哪部分人会爱这个 ts 呢?属于是那种延迟满足的人对吧?跟人的性格有关系,就是说他先吃苦,然后再享受。是这部分人,因为你一旦上了 ts, 你当前的开发肯定是会更加的困难,他会耗费你更多的开发时间,这是一定的,但他带来的好处是高可维护性以及呢减少出错的几率。所以说说的根本的话,他减少的是未来的开发时间。 他这种延迟满足性格的人呢,他就特别喜欢 ts 对吧,我现在苦一点无所谓,将来我就舒服了。而相反呢,如果说活在当下对吧,想及时行乐的人啊,他可能就不太喜欢这个 ts 啊,因为他 确实会带来一些负担。很多朋友觉得 ts 用起来很困难啊,其实呢, ts 本身它是非常简单的,你说 ts 本身有个啥,它无非就是做类型标注的对吧?给函数参数,返回值变量标一些类型,它的基本功能呢,其实非常非常的简单。那它的难点在哪呢?它的核心难点在于 由于 ts 的加入啊,他会重塑你的开发思维,他是思维层面的,主要面向对象,养要面向对象的语法。那有啥难点呢?关键是怎么去用对吧,因为你一旦用它了,你的思维会变化,跟过去的想法就不一样了,很多同学很难适应这一点啊, 为什么 t s 一来,它会改变你的开发思维呢?你想啊, t s 是一门弱类型的语言,但是呢, t s 它是强类型的,尽管它的强类型只存在于编译时态,但它依然是强类型的, 所以说你在开发的时候,要用强类型语言的思维来进行开发。但是同时呢,他又结合了 gs 的弱类型的一些特点,比方说动态的属性啊,比方说联合类型啊,对吧,一个参数或者一个变量,他 可能是多种类型之一,那么像这种弱类型的特点结合起来的话,很多同学呢,就有点吃不消了,这也是很多人诟病这个 t s 它是一个负担的一个很核心的原因啊。其实如果说你之前接触过强类型语言,像 java 呀,像写个 c 下边啊之类的,那你学习 t s 的话就非常的轻松了, 因为你过去在用那些强类型语言的时候,你已经具有了类型的思维,就是我要写一个功能啊,我首先得清楚这个功能里边涉及到哪些类型,但是如果说一个存钱能开发的人员的话,他过去不是这样想的,他从来不去思考有什么样的类型,因为在 gs 里边,所有的对象都是 object 类型, 因此呢,就是这个开发思维呢,有一些转变啊,所以主要的难点呢在这。那么具体来说的话,主要是两个层面啊,一个是 ts, 进来过后呢,他就能够实现完整的面相对象语法了,因为我们知道 gs 呢,他虽然支持面相对象了,但是呢,支持的不是那么好,比方说抽象类啊,比方说自断修饰服啊,这些都没有是吧?但 ts 进来过后呢,这个面相对象的支持就完整。 那如果说你要用面相对象来开发的话,那你首先得搞定面相对象的那种思维方式,那就跟你平时写代码的思维方式就不一样,但是呢,面相对象他又不属于 t s, 他本来就是一个跨语言的这么一个 开发方式。首先呢,如果说你要用变相对象开发的话,你思维肯定要变,对不对?而很多同学呢,很难适应这种开发方式,临时呢,把锅呢就甩给了 ts 啊,其实锅呢, ts 不应该背啊。那么第二个难点呢,就是我们这个系列要讲的啊,就类型演算,因为一旦产生了类型之后呢,类型与类型之间它是有关联的。 过去呢,我们写 gs 代码是不去 care 他之间有什么样的关联,反正都是弱类型的,我连类型都不关心,我还去关心他里面有哪些关联,不可能的。 但是有了 ts 之后就不一样了,由于出现了类型,那么类型与类型之间他们是如何来关联的?那么这里呢,就会产生思维上的转变。好,我这里随便举个例子哈,随便举个小例子,比方说我这里有个产品对象啊,我申请到这么一个接口啊,里边有一些字段,然后呢,我有个函数啊,要创建一个产品,你给我传一些参数, 那么这个参数里边呢,它的字段跟那个产品的差不多啊,你是要传这么一些东西,但是呢,其中一个字段呢有变化,就是 stock 可传,可不传,不传的话默认值就是零。那出现这种情况,你肯定不能用它呀,对吧?你这里参数的约束,你肯定不能用 product, 为啥呢?因为这个 product 里边它 这个玩意是必填的。那你只能去新写一个类型啊,但是你新写个类型之后呢,你会发现他这里边有很多重复的字段,因为我这个地址比较简单哈,你可能会觉得就重复这么一点,好像没啥,但是这个玩意你把它扩散一下思维, 一个项目里边到处都是重复,要到处维护,这个类型就乱套了。所以说我们有了类型之后啊,我们不仅仅是要考虑他的运行时态了,还要考虑他编译时态里边各种类型声明之间,他们有什么样的关联。你看这个玩意 他肯定是有关联的,对吧?什么关联呢?从逻辑上来讲,他是用来创建他的,那么他们的字段之间一定存在着某种联系,那么如何来消除这一部分的重复代码?当我们类型标注本身具备可维护性,那么这就是类型 演算所要搞定的事情。所以说这个 ts 说起来很有意思啊,就 ts 呢,给 gs 代码带来了可维护性,但是 ts 本身他又需要维护,因此呢,这就给我们开发,特别是前期的开发,呃,造成了不小的负担啊。 而这个负担的付出呢?值不值,那就要看你的项目规模了啊,因为小的项目我觉得上 ts 的必要性不大,但是呢,一些中大型的项目呢,就很有必要了,因为你这个玩意不是一次性的,你开发周期本身就很长,对吧?要分阶段的开发,那么你就必须要考虑将来整个工程的口味护心,你用纯 ts 的话,后边的口味护心是非常糟糕的, 到后边呢,出了一些 bug, 你很难调试的,像有了 t s 过后呢,他可以把很多的错误啊,暴露在编译时态,就是不用等你运行,他就会告诉你这一块可能 有问题,那么可以让你及时的发现错误。所以说把一个中大型的项目,整个项目的开发周期当成一个整体的话, ts 肯定是起到至关重要的作用,但是你单看其中一段开发时间,特别是前期的开发,你会发现这个 ts 起的是反作用啊, 所以说关键是要从什么样的维度去看的好,说远了哈,我们这回个系列呢,给大家介绍一下啊,就是玩这个类型演算,搞定多个类型之间是如何去关联的。我们这个系列呢,会讲一些官方的啊,提供的一些类型演算工具也会呢,去自己写一些类型演算工具啊,都会设计好,我们这里可以到这了啊,关注我,学习更多有价值的前端知识。


