皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

TypeScript 3.6 Beta 发布,稳定版定于8月底推出

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) {
    // TypeScript 3.5 and prior thought this was a 'string | number'.
    // It should know it's 'string' since 'done' was 'true'!
    curr.value
}

此外,生成器会假设 yield 的类型始终为 any。

function* bar() {
    let x: { hello(): void } = yield;
    x.hello();
}

let iter = bar();
iter.next();
iter.next(123); // oops! runtime error!

以第一段代码为例,在 TypeScript 3.6 中,检查器会知道 curr.value 的正确类型应为 string,并在最后一个示例中纠正对 next() 的错误调用。这要归功于因在IteratorIteratorResult类型声明中进行的一些更改而引入部分新的类型参数,以及 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());
//              ~~~~~~~~~~~~~
// Argument of type 'Promise<User>' is not assignable to parameter of type 'User'.
//   ...
// Did you forget to use 'await'?
}

未来计划

TypeScript 3.6 稳定版暂定于8月底发布,团队表示会在稳定版发布几周前推出候选版本。

详细更新内容请查看发布公告

转自 https://www.oschina.net/news/108509/typescript-3-6-beta-released