1. ホーム
  2. typescript

[解決済み] なぜ `downlevelIteration` はデフォルトでオンになっていないのですか?

2023-06-16 18:39:40

質問

ES5でスプレッド演算子を使用する場合 ... を使用して IteratorArray を使用するとエラーが表示されます。 -downlevelIteration というコンパイラーオプションが表示される。一旦オンにすると、スプレッド演算子は完璧に動作するようです。

なぜこれを指定する必要があるのでしょうか?tslib から放出される生成コードが増える以外に、有効にした場合のデメリットや制限はあるのでしょうか。

もう一つの例です。 Nの配列を動的に作成する。 (例:3)の配列を作成します。

[...Array(3).keys()]  // output: [0, 1, 2]

VS Codeでエラーが表示されます。

のエラーメッセージ tsc :

IterableIterator' 型は配列型や文字列型ではありません。コンパイラオプション '--downlevelIteration' を使用し、イテレータの反復処理を許可してください。

TypeScript Playgroundでコードとエラーを編集して表示する。

どのように解決するのですか?

を読んだ後 リリースノート という記事と TypeScriptにおけるES3/ES5のためのダウンレベルイテレーション , 私はこの質問に対する答えは downlevelIteration が無効になっているのは、TypeScriptが(古いバージョンのJavascriptをサポートするために)互換性コードのコンパイルをどのように処理したいかを(設定によって)決定する必要があるためです。

記事中の長い説明で明らかなように、TypeScriptに必要なヘルパー関数をインライン化するか(単純だが、プロダクションのバンドルサイズが大きくなる可能性がある)、TypeScriptで tslib を依存関係として使用し、その外部メソッドを呼び出すようにTypeScriptを設定するかどうかを決定します。

を読むことを強くお勧めします。 TypeScriptにおけるES3/ES5のためのダウンレベルイテレーション を読むことを強くお勧めします...そしておそらくあなたの最初の問題に対する別の解決策になるでしょう。