TypeScript 3.6 Beta 已发布,团队表示希望此测试版本有望成为 TypeScript 3.6 的完整功能版本。此外,在接下来的几周内,团队会为 RC 版以及稳定版的发布继续修复错误并提升性能和稳定性。
可通过 NuGet 体验测试版,或使用 npm 进行获取:
npm install -g typescript @ beta
下面继续看看此版本值得关注的新功能。
使用更严格的生成器(Stricter Generators)
TypeScript 3.6 引入了对迭代器和生成器函数(generator functions)的更严格检查。在早期版本中,生成器的使用者无法区分一个值是来自 yield 操作或是从生成器返回。
function* foo() {
if (Math.random() < 0.5) yield 100;
return "Finished!"
}
let iter = foo();
let curr = iter.next();
if (curr.done) {
curr.value
}
此外,生成器会假设 yield 的类型始终为 any。
function* bar() {
let x: { hello(): void } = yield;
x.hello();
}
let iter = bar();
iter.next();
iter.next(123);
以第一段代码为例,在 TypeScript 3.6 中,检查器会知道 curr.value 的正确类型应为 string,并在最后一个示例中纠正对 next() 的错误调用。这要归功于因在Iterator和IteratorResult类型声明中进行的一些更改而引入部分新的类型参数,以及 TypeScript 用于代表称为Generator类型的生成器。
Improved UX Around Promises
Promise是目前使用异步数据的最常用方法之一。不幸的是,使用Promise面向对象的 API 通常会让使用者感到困惑。因此针对Promise被错误处理的情况,TypeScript 3.6 引入了一些改进。
例如,在将其传递给另一个函数之前,Promise忘记.then()或者await内容通常是很常见的。TypeScript 的错误消息现在是专用的,并告知使用者他们可能应该考虑使用await关键字。
interface User {
name: string;
age: number;
location: string;
}
declare function getUserData(): Promise<User>;
declare function displayUser(user: User): void;
async function f() {
displayUser(getUserData());
}
未来计划
TypeScript 3.6 稳定版暂定于8月底发布,团队表示会在稳定版发布几周前推出候选版本。
详细更新内容请查看发布公告。 |