BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

TypeScript 2.1发布

| 作者 谢丽 关注 9 他的粉丝 发布于 2016年12月15日. 估计阅读时间: 6 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

TypeScript是微软开发的一个JavaScript的超集,提供了最新的JavaScript特性以及可选的静态类型。近日,TypeScript 2.1发布。该版本提供了功能更为强大的类型检查器,并且让开发人员可以编写出更简洁的代码。以下是该版本带来的主要新特性:

  • Downlevel async/await:虽然之前的版本已经提供了async/await,但downlevel async/await让开发人员可以在ES3/ES5环境里使用该特性。
  • Object Rest&Spread:这是ES2017的一项新提案,让开发人员可以便捷地合并、拆解以及部分地复制对象。在使用类似Redux这样的库时,这一特性已经被广泛地使用。Object Spread让开发人员可以便捷地复制一个对象,如下所示:

        let copy = { ...original };
    

    类似地,我们可以合并多个不同的对象,如下所示,合并后的对象将同时具有foo、bar和baz的属性:

        let merged = { ...foo, ...bar, ...baz };
    

    开发人员也可以在合并后的对象中添加新属性。Object Rest是一个相对的过程,它可以排除特定的属性,如下所示:

        let { a, b, c, ...defghijklmnopqrstuvwxyz } = alphabet;
    
  • keyof和Lookup类型:实际上,keyof操作符被称为“索引类型查询(index type query)”,它就像一个查询对象类型的键的查询,如下所示:

        interface Person {
            name: string;
            age: number;
            location: string;
        }
    
        let propName: keyof Person;
    

    上述代码也可以写成如下形式:

        let propName: "name" | "age" | "location";
    

    而Lookup类型被称为“索引访问类型(indexed access types)”,它看上去像访问一个元素,如下所示:

        interface Person {
            name: string;
            age: number;
            location: string;
        }
    
        let a: Person["age"];
    
  • “映射类型(Mapped Types)”:这是TypeScript 2.1最令人感兴趣的特性。假如我们有一个Person类型,如下所示:

        interface Person {
            name: string;
            age: number;
            location: string;
        }
    

    如果我们希望以此为基础创建一个属性全为布尔值的类型,那么我们需要定义一个全新的类型:

        interface BooleanifiedPerson {
            name: boolean;
            age: boolean;
            location: boolean;
        }
    

    而借助映射类型,我们可以将BooleanifiedPerson定义为:

        type BooleanifiedPerson = {
            [P in "name" | "age" | "location"]: boolean
        };
    

    借助keyof操作符,上述代码还可以进一步简化为:

        type BooleanifiedPerson = {
            [P in keyof Person]: boolean
        };
    
  • Partial类型:让开发人员可以创建现有类型的所有可选版本。此外,TypeScript 2.1还提供了Readonly、Record和Pick等实用类型,感兴趣的读者可以点击这里查看它们的实现方式。

此外,TypeScript 2.1还放松了对程序包导入的检查,只要用户安装了就可以使用,TypeScript将不会再因为找不到相关的声明文件而提示错误。

感兴趣的读者可以通过NuGet获取TypeScript,也可以通过npm进行安装:

npm install -g typescript

Visual Studio 2015用户需要首先升级到Update 3,再通过专门的安装包进行安装。Visual Studio CodeSublime Text用户也可以根据相关的说明使用最新版本的TypeScript。


感谢陈兴璐对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT