您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    Angular为什么选择TypeScript?
    时间:2017-08-31 12:33 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    Angular是用TypeScript编写的。在这篇文章中,我将讨论为什么我们作出决议。我还将分享我运用TypeScript的阅历:它如何影响我写和重构我的代码的方式。

    TypeScript有很好的工具

    TypeScript的最大的卖点就是工具。它提供初级自动完成,导航和重构。拥有这样的工具简直是大型项目的必备要求。没有他们,改动代码的恐惧使代码库处于半只读形状,并使大规模重构十分风险且昂贵。

    TypeScript不是编译为JavaScript的独一类型言语。还有其他言语具有更强的类型系统,在实际上可以提供相对弱小的工具。但在实际中大少数人除了编译器之外没有其他的东西。这是由于构建丰厚的开发工具必须是第一天就明白的目的,它是针对TypeScript团队的。这就是为什么他们构建言语效劳,可以由运用的编辑器提供类型反省和自动完成。假设您想知道为什么有这么多编辑用具有很好的TypeScript支持,答案就是言语效劳。

    智能感知和重构提示(例如:重命名变量)对代码编写进程和重构进程的重要性是不争的理想。虽然很难权衡,但我觉得如今之前要几天时间的重构可以在不到一天的时间内完成。

    虽然TypeScript大大提高了代码编辑体验,但它使得开发人员设置愈加复杂,特别是与在页面上放置ES5脚本相比。此外,您不能运用剖析JavaScript源代码的工具(例如JSHint),但通常有足够的替代品。

    TypeScript是JavaScript的超集

    由于TypeScript是JavaScript的超集,因此您无需阅历少量重写即可迁移到JavaScript。你可以一个模块一个模块,逐渐的迁移。

    只需选一个模块,将.js文件重命名为.ts,然后逐渐添加类型注释。完成一个模块之后,再挑选下一个重构模块。一旦编写了整个代码库,就可以末尾调整编译器设置,使其愈加严厉。

    这个进程能够需求一些时间,但是关于Angular来说,这还不是最大的成绩。逐渐迁移的进程,可以让我们保持开发新功用的同时来修复转换进程中的bug。

    TypeScript明白了笼统

    一个好的设计是关于设计良好的接口。并且以支持它们的言语来表达接口的想法要容易得多。

    例如,想象一个销售书籍的运用顺序,可以经过用户界面的注册用户或经过某种API的外部系统停止购置。

    Angular为什么选择TypeScript?

    正如你所看到的,这两个类都扮演购置者的角色。虽然对运用极为重要,在代码中没有明晰的表达购置者的含义。没有名为buyeraser.js的文件。因此,有人能够会在不知道这段代码含义的状况下修正这个代码。

    function processPurchase(purchaser, details){ }   

    class User { }   

    class ExternalSystem { } 

    只经过看代码来确定什么对象可以充任购置者的角色,这个角色有什么办法十分困难。我们不知道,我们不会从我们的工具中取得很多协助。我们必须人为推断这个信息,这很慢,容易出错。

    如今,将其与我们明白定义购置者接口的版本停止比较。

    interface Purchaser {id: int; bankAccount: Account;}   

    class User implements Purchaser {}   

    class ExternalSystem implements Purchaser {} 

    具有类型的版本可以清楚的表示,有一个购置者的接口,然后有两个类完成了这个接口。所以TypeScript接口允许我们定义笼统/协议/角色。

    重要的是要看法到,TypeScript不会强迫我们引入额外的笼统。购置者笼统存在于JavaScript版本的代码中,但没有明白定义。

    在静态类型的言语中,子系统之间的边界是运用接口定义的。由于JavaScript缺少接口,边界并没有在纯JavaScript中表达出来。不能清楚地看到边界,开发人员末尾依赖于详细的类型而不是笼统接口,这代码耦合度十分高。

    在开发Angular的进程中,在转换到TypeScript之前和之后的任务阅历,坚决了我的想法。定义接口,强迫我去思索API的边界,协助我去定义子系统的接口,并且暴显露耦合的中央。

    TypeScript使代码更容易阅读和了解

    是的,我知道这看起来不直观。让我试着用一个例子来阐明我的意思。我们来看看这个函数jQuery.ajax()。们可以从签名中取得什么样的信息?

    jQuery.ajax(url, settings) 

    我们独一可以确定的是该函数有两个参数。我们可以猜出这些类型。也许第一个是一个字符串,第二个是一个配置对象。但这仅仅是猜测,我们能够会错。我们不知道什么选项进入设置对象(他们的名字和类型),或许这个函数前往什么。

    我们没有办法在不查看源码或许文档的状况下调用此函数。反省源代码不是一个好的选择 - 功用和类的要点是可以在不知道它们如何完成的状况下运用它们。换句话说,我们应该依托他们的接口,而不是依托它们的完成。我们可以反省文档,但它不是最好的开发人员体验 - 它需求更多的时间,文档往往是过时的。

    所以虽然很容易读取jQuery.ajax(url,settings),要真正了解如何调用这个函数,我们需求读取它的源码或其文档。

    如今,将其与类型版本比照

    ajax(url: string, settings?: JQueryAjaxSettings): JQueryXHR;  

     

    interface JQueryAjaxSettings {  

      async?: boolean;  

      cache?: boolean;  

      contentType?: any;  

      headers?: { [key: string]: any; };  

      //...  

    }  

     

    interface JQueryXHR {  

      responseJSON?: any; //...  

    它给了我们更多的信息。

    这个函数的第一个参数是一个字符串。

    settings参数是可选的。我们可以看到可以传递给函数的一切选项,不只仅是它们的名字,还包括它们的类型。

    该函数前往一个JQueryXHR对象,我们可以看到它的属性和函数。

    (责任编辑:admin)