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

局长
 局长
发布于 2019年07月25日
收藏 4

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月底发布,团队表示会在稳定版发布几周前推出候选版本。

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

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:TypeScript 3.6 Beta 发布,稳定版定于8月底推出
加载中

精彩评论

容儿2015
版本更新好快。很给力。

最新评论(4

容儿2015
版本更新好快。很给力。
基泥钛镁
基泥钛镁
搞起来
老冰棍
老冰棍
一门新的语言
返回顶部
顶部