活字体3.6のリリース、Microsoftのスクリプト言語

活字体3.6がリリースされている次のように、アップデートは以下のとおりです。

より剛性ジェネレータ(厳密な発電機)

活字体3.6イテレータとのジェネレータ機能(発電機能)の厳しいチェックを課します。以前のバージョンでは、ユーザ降伏値から発電機を区別することができないが、生産者又はオペレータから返されます。

さらに、唯一ジェネレータ型は、任意の仮定の収率です。

コードの最初の段落に、例えば、活字体3.6に、検査官はcurr.value正しいタイプは、最後の例では、次の()の呼び出し時に文字列、およびエラーを修正する必要があります知っています。おかげによるものでIteratorIteratorResultいくつかの変更が求めパラメータの新しいタイプの型宣言部、および活字体の代表で導入されたGenerator発電機のタイプ。

これは、ユーザがタイプ記載イテレータ収率型、戻り型と次的に許容可能なタイプを放出することを可能にします。

これに基づき、新しいタイプのイテレータジェネレータであり、それは同時に投げる方法を存在返し、反復されています。

生成された値を区別するために、返さ、IteratorResultタイプジョイントタイプを変換する活字体3.6:

type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;

interface IteratorYieldResult<TYield> {
    done?: false;
    value: TYield;
}

interface IteratorReturnResult<TReturn> {
    done: true;
    value: TReturn;
}

要するに、これは直接法イテレータを適切イテレータの値を小さくすることができるであろうときことを意味します。

正確ジェネレータのタイプ()を呼び出す次から渡すことができる表現するために、活字体3.6は、関数発生器の本体内収率いくつかの用途を推定することができます。

あなたが明示的にしたい場合は、強制発現収率、タイプおよび歩留まり計算の値から返された明示的な戻り値の型を使用することができます。以下は、のみ)(次のブール値と呼ばれ、完了、値のいずれかの文字列の値、または数に応じてすることができます。

/**
 * - yields numbers
 * - returns strings
 * - can be passed in booleans
 */
function* counter(): Generator<number, string, boolean> {
    let i = 0;
    while (true) {
        if (yield i++) {
            break;
        }
    }
    return "done!";
}

var iter = counter();
var curr = iter.next()
while (!curr.done) {
    console.log(curr.value);
    curr = iter.next(curr.value === 5)
}
console.log(curr.value.toUpperCase());

// prints:
//
// 0
// 1
// 2
// 3
// 4
// 5
// DONE!

より正確なアレイの拡張

在默认情况下,TypeScript 使用一个更简单的发射,它只支持数组类型,并支持使用 --downlevelIteration 标志在其他类型上进行迭代。在此标志下,发出的代码更准确,但要大得多。但是,在某些边缘情况下,受支持的数组还是存在一些差异,如下:

[...Array(5)]

等效于以下数组:

[undefined, undefined, undefined, undefined, undefined]

但是,TypeScript 将原始代码转换为以下代码:

Array(5).slice();

这是不一样的,Array(5) 生成长度为 5 的数组,但没有属性:

当 TypeScript 调用 Slice( ) 时,它还会创建一个数组,其中包含尚未设置的索引。

3.6 版本引入了一个新的 __spreadArrays 助手,用于精确地模拟 ECMAScript 2015 中在 --downlevelIteration 之外中发生的情况。__SpreadArray 也可在 tslib 中使用。

Improved UX Around Promises

Promise 是当前处理异步数据的最常见方法之一,不幸的是,使用Promise面向对象的 API 通常会让使用者感到困惑。因此针对Promise被错误处理的情况,TypeScript 3.6 引入了一些改进。

例如,在将其传递给另一个函数之前,Promise忘记.then()或者await内容通常是很常见的。TypeScript 的错误消息现在是专用的,并告知使用者他们可能应该考虑使用await关键字。

另外还提供快速修复:

更好的 Unicode 支持标识符

当发射到 ES 2015或其他时,3.6 版本包含更好地支持标识符中的 Unicode 字符:

在 SystemJS 中支持 import.meta

3.6 版本支持在将 module 目标设置为 system 时,将 import.meta 转换为 context.meta。

get and set Accessors Are Allowed in Ambient Contexts

在早期版本的 TypeScript 中,并不允许在环境上下文中 set 和 get 访问器,其基本原理是,就写入和读取这些属性而言,访问器与属性并没有区别;然而,由于 ECMAScript 的类字段提案可能与现有版本的 TypeScript 中的行为不同,则需要一种方法来沟通这种不同的行为,以便在子类中提供适当的错误。

因此 TypeScript 3.6 中,用户可以在环境上下文中编写 getter 和 setter。

环境类和函数可以合并

在以前版本中,在任何情况下合并类和函数都是有错的。此版本中,环境类和函数(带有 declare 修饰符的类/函数,或 .d.ts 文件中的类/函数)可以合并。如下内容:

而不需要使用:

它的一个优点是可以轻松地表达可调用的构造函数模式,同时允许名称空间与这些声明合并(因为 var 声明不能与名称空间合并)。

APIs to Support --build and --incremental

TypeScript 3.6 增加了两组用于操作项目引用和增量式程序构建的 API。

对于 --incremental,用户可以使用 createIncrementalProgram 和 createIncrementalCompilerHost API。用户还可以使用新的 readBuilderProgram 函数从该 API 生成的 .tsbuildinfo 文件中重新补充旧的程序实例,该函数仅用于创建新程序(即不能修改返回的实例,它仅用于其他 Create*Program 函数中的oldProgram 参数)。

New TypeScript Playground

此版本中,新的 TypeScript playground 支持许多新的选择,包括:

  • target 选项(允许用户从 ES5 切换到 ES3、es2015、esnext 等)
  • 所有标记(包括 strict)
  • 对普通 JavaScript 文件的支持(使用 allowJS 和 CheckJS)

当共享链接到 playground 示例时,这些选项也会持续存在,这样用户就可以更可靠地共享示例。

Semicolon-Aware Code Edits

像 Visual Studio 和 Visual Studio Code 这样的编辑器可以自动应用快速修复、重构和其他转换,比如从其他模块自动导入值。这些转换由 TypeScript 驱动,老版本的 TypeScript 无条件地在每条语句的末尾添加分号;不幸的是,这不符合许多用户的样式指南,许多用户对编辑器插入分号不满意。

在此版本中,在应用这类编辑时,TypeScript 可以检测文件是否使用分号。如果你的文件是缺少分号,TypeScript 则不会添加分号。

Smarter Auto-Imports

JavaScript 有许多不同的模块语法或约定:ECMAScript 标准、Node 支持的模块语法或约定(CommonJS)、AMD、System.js 等等。在大多数情况下,TypeScript 将默认使用 ECMAScript 模块语法自动导入,在具有不同编译器设置的某些 TypeScript 项目中,或者在具有普通 JavaScript 和 Require 调用的 Node 项目中,这通常是不合适的。

在 3.6 版本中,在决定如何自动导入其他模块之前,它会查看现有的导入。

Breaking Changes

类成员 constructor 现在是构造函数

根据 ECMAScript 规范,名为 constructor 的方法的类声明现在是构造函数,无论它们是使用标识符名称声明,还是使用字符串名称声明。

DOM 更新

在 lib.dom.d.ts 中已经删除或更改了许多声明,这包括(但不限于)以下内容:

  • 全局 window 不再定义为类型 Window,而是定义为类型 Window & type of globalThis。在某些情况下,将其类型称为 typeof window
  • GlobalFetch 移除了,而是使用 WindowOrWorkerGlobalScope
  • Navigator 上的某些非标准属性已经消失
  • experimental-webgl 移除了,而是使用 webgl 和 webgl2

JSDoc 注解不再合并

在 JavaScript 文件中,TypeScript 只会在紧接 JSDoc 注解之前确定声明的类型。

关键字不能包含转义序列

以前,关键字被允许包含转义序列。3.6 版本不再允许:

关于 TypeScript 3.6 更多信息,请见 TypeScript 网站。使用 npm 命令获取:

npm install -g typescript

还可以通过以下方式获得编辑器支持:

发布说明:

https://devblogs.microsoft.com/typescript/announcing-typescript-3-6/

おすすめ

転載: www.oschina.net/news/109456/typescript-3-6-released