BT

你的观点很重要! 快来参与InfoQ调研吧!

TypeScript 2.6新增严格参数逆变及其他特性

| 作者 Sergio De Simone 关注 5 他的粉丝 ,译者 谢丽 关注 3 他的粉丝 发布于 2017年11月7日. 估计阅读时间: 3 分钟 | ArchSummit社交架构图谱:Facebook、Snapchat、Tumblr等背后的核心技术

除了改进工具外,在TypeScript 2.6的新特性中,有一个新的标识可以强制执行严格参数逆变。

TypeScript 2.6新增了编译器选项--strictFunctionTypes,对函数参数进行严格逆变比较。

{
"compilerOptions": {
    "strictFunctionTypes": true
}

TypeScript的默认行为是对函数参数进行双变比较。JavaScript有多个基本特性都依赖于此,尤其是Array<T>。实际上,如果TypeScript使用严格逆变参数(例如,如果签名的其他部分一样,那么在任何需要使用返回更一般化类型的函数的地方,都可以使用返回更具体类型的函数)和严格协变返回值(例如,如果签名的其他部分一样,那么在任何需要使用返回更具体类型的函数的地方,都可以使用返回更一般化类型的函数),那么Array<T>中的T就是不变的,也就是说,Array<Derived>不能赋给Array<Animal>。双变参数可以确保数组有一个恰当的行为,但可能会产生运行时错误,比如下面这种情况:

function makeLowerCase(s: string) { return s.toLowerCase(); }
declare let foo: Promise<string|number>;
foo.then(makeLowerCase); //如果foo解析为数值就会失败

新增的--strictFunctionTypes选项就是让编译器可以捕获这种错误。这个选项只能用于函数,而不是方法,以便数组及这门语言的其他特性仍然可以按预期方式工作。@ts-ignore注释是该语言新增的另外一个有用的特性,它可以屏蔽注释行下面的代码行出现的任何错误。例如,在下面的代码片段中,@ts-ignore注释会屏蔽掉不可达代码错误。

if (false) { 
    // @ts-ignore: 不可达代码错误
    console.log("hello");
}

在工具方面,由于可以更好的识别可能受变更影响的文件,TypeScript编译器现在实现了一个更快的--watch模式。这样,只有受影响的文件会经历树转换和输出过程。

此外,JSDoc注释现在可以转换成恰当的TypeScript参数注解,这可以简化已有代码库的迁移,自动添加JSDoc类型注解。

TypeScript 2.6还引入了几项可能会破坏现有代码库的变更。特别需要指出的是,使用了--noUnusedLocals--noUnusedParameters时,只写引用会被标记为错误。而且,在声明文件和declare module块中,表达式不允许默认输出。

运行下面的命令可以安装TypeScript 2.6:

npm install -g typescript

要想了解有关TypeScript 2.6的详细信息,请查阅TypeScript的新特性

查看英文原文TypeScript 2.6 Adds Strict Parameter Contravariance and More

评价本文

专业度
风格

您好,朋友!

您需要 注册一个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