除了改进工具外,在 TypeScript 2.6 的新特性中,有一个新的标识可以强制执行严格参数逆变。
TypeScript 2.6 新增了编译器选项--strictFunctionTypes
,对函数参数进行严格逆变比较。
{ "compilerOptions": { "strictFunctionTypes": true }
TypeScript 的默认行为是对函数参数进行双变比较。JavaScript 有多个基本特性都依赖于此,尤其是 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
评论