GMTC北京站9折购票倒计时,部分日程已上线,戳此查看 了解详情
写点什么

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

  • 2017 年 11 月 06 日
  • 本文字数:968 字

    阅读完需:约 3 分钟

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

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

复制代码
{
"compilerOptions": {
"strictFunctionTypes": true
}

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

复制代码
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

2017 年 11 月 06 日 18:001304
用户头像

发布了 1008 篇内容, 共 336.1 次阅读, 收获喜欢 317 次。

关注

评论

发布
暂无评论
发现更多内容

week2-作业

Mr_No爱学习

第六周作业

Geek_ce484f

极客大学架构师训练营

CAP原理

知行合一

初始化文章

Yuchen

自我独白

架构师训练营第六周作业

xs-geek

极客大学架构师训练营

LeetCode题解:90. 子集 II,回溯+哈希表去重,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

极客 - 架构设计指导原则

jorden wang

架构设计原则

架构师训练营第六周学习总结

Gosling

极客大学架构师训练营

架构师训练营 Week6 - 课后作业

极客大学架构师训练营

2周 作业

水浴清风

学习总结 -week2

Mr_No爱学习

第二周学习总结

晴空万里

极客大学架构师训练营

第六周作业1

Yangjing

极客大学架构师训练营

架构师训练营第六周作业

四夕晖

架构师训练营第六周课后作业

Gosling

极客大学架构师训练营

架構師訓練營 week6 作業

ilake

极客时间-设计原则

第二周作业

jingx

Architecture Phase1 Week6:Summarize

phylony-lu

极客大学架构师训练营

架构师训练营第二周总结

Sandman

架构师训练营 1 期 -- 第六周笔记

曾彪彪

极客大学架构师训练营

架构师课程第二周作业

文江

week2-作业1

Mr_No爱学习

第六周作业总结

Geek_ce484f

极客大学架构师训练营

Architecture Phase1 Week6:HomeWork

phylony-lu

极客大学架构师训练营

【第六周】技术选型(二)

云龙

【架构师训练营第 2 期】第 2 周作业

知致

第二周作业

Hjh

第六周作业

Meow

第二周-学习总结

ray-arch

极客大学架构师训练营

学习笔记:架构师训练营-第六周

四夕晖

TypeScript 2.6新增严格参数逆变及其他特性_JavaScript_Sergio De Simone_InfoQ精选文章