最近发布的TypeScript 3.9主要集中在性能和稳定性方面,但它确实包括一些值得仔细研究的语言更新。
未调用函数检查的扩展
TypeScript 3.9继续寻求拯救你自己,它扩展了3.7版本中引入的未调用函数检查。这些检查报告当一个函数在一个if条件下被使用而没有被调用时,比如:
const isValid() => someGlobalValue > 10;
let answer: string;
if (isValid) { // error because isValid isn't called
answer = 'yes';
} else {
answer = 'no';
}
最新版本将这一功能也带到了三元运算符上:
const answer1 = isValid ? 'yes' : 'no'; // error
const answer2 = isValid() ? 'yes' : 'no'; // no error
这种类型的功能是一个完美的例子,说明该语言在警告开发者其代码的潜在问题方面做得很好,特别是当这些问题与语法或类型无关的时候。
这就是 @ts-expect-error注释
// @ts-expect-error 注释为开发者提供了一种方法,以指定下一行应该包含一个类型错误。如果是这样的话,TypeScript将抑制该行的任何错误。如果注释存在而没有错误,TypeScript将抛出一个错误,因为你指定了一个错误是预期的。
这个注释在编写单元测试时可能特别有用。假设你有一个函数,对数据进行一些运行时检查。为了验证运行时检查是否能正确处理不恰当的输入,你可能需要向函数传递一些它不期望的数据,这样会使参数类型检查失败。@ts-expect-error 注释将抑制所产生的类型错误,以便无效的数据可以被测试:
function add(a: number, b: number) {
if (typeof a === 'string' || typeof b === 'string') {
return 'fail';
}
}
it('should return "fail" when a string is passed', () => {
// @ts-expect-error
expect(add(2, '2')).toBe('fail');
});
其他TypeScript 3.9变化
这个版本中还有其他一些更新,改善了TypeScript的性能和稳定性,为下一个版本提供了更坚实的基础。编译器的速度提高了不少,使一些项目的构建时间减少了50%。TypeScript的IDE集成也得到了改善,一个恼人的Promise.all 打字问题也得到了修复。
如果想更深入地了解TypeScipt,请查看我们权威的TypeScript指南。或者,如果你需要帮助,请随时联系我们。
伴随着这些改进,还有一些突破性的变化,所以在升级前请查看发布说明。就像我们一样,TypeScript在covid-19隔离期间花时间在自己身上工作,我们都很感激