Typeescript 3.9常用新特性一覧(推奨)


何を更新しますか?概況一覧
1、Promise.allの定義を最適化しました。3.7バージョンの中にnullまたはundefinedを混用した時の問題はすでに3.9で修復されました。
2、包装速度が大幅に向上しました。マイクロソフトチームが自分で測った時、typescriptプロジェクトの平均コンパイル時間は26 sから10 sぐらいに短縮しました。
3、/@ts-expect-error新規コメントの追加
4、条件文で起動していない関数を検出する
5、エディタのアップグレード
  • 5.1 JavaScriptにおけるCommon JSの自動導入
  • 5.2コード操作時に正しい改行を保持する
  • 5.3快速修復欠落の関数を追加して表式
  • に戻ります。
  • .5.4サポート“Solution Style”tsconfig.jsonファイル
  • 6、大きな変化があります。
    主にType Scriptの定義と仕様書の変更と修正前のバグです。
    いくつかのポイントを選んで書いてください。
    1、interfaceの最適化とpromise.all使用修復
    3.7バージョンの後でpromise.all&promise.raceなどの方法が更新されたことを知っていますが、問題もあります。null&undefinedを使用していますが、特に明らかです。
    
    nterface Lion {
    
     roar(): void
    
    }
    
    interface Seal {
    
     singKissFromARose(): void
    
    }
    
    async function visitZoo(lionExhibit: Promise<Lion>, sealExhibit: Promise<Seal | undefined>) {
    
     let [lion, seal] = await Promise.all([lionExhibit, sealExhibit]);
    
     lion.roar(); // uh oh
    
    // ~~~~
    
    // Object is possibly 'undefined'.
    
    }
    このような行動はおかしいです。実はsealExhibitに含まれるundefinedは、undefinedを誤ってlion typeに導入しました。ここでは間違い引用です。
    もちろん最新の3.9バージョンでこの問題を修復しました。
    1.1全く新しいawaited type
    awaited typeは主に現在のpromiseに対してより良い定義と使用です。
    発売予定だったが、マイクロソフトはまたジャンプして、次のバージョンを待つことができます。
    2、Type Scriptパッケージコンパイルなどのスピードがアップします。
    ここでは主にいくつかのマイクロソフトの内部プロジェクトの性能最適化を最適化しました。
  • Typeescriptチームは以前のMaterial-uiとSteyde-Componentsなどのコンポーネントが極めて悪い編集/コンパイル速度をもたらすことを発見しました。主に結合タイプ、交差タイプ、条件から判断されるタイプおよび各種マッピングタイプの性能問題から最適化します。関連するライブラリをコンパイルする時間を40%ぐらい減らしました。
  • Visual Studio Codeチームの提案によると、ファイルの名前変更を実行する時、どの導入文が更新されるかを確認するだけで5秒から10秒の時間がかかります。Type Script 3.9は内部コンパイラと言語サービスキャッシュファイルの検索方式を調整し、この問題を順調に解決しました。
  • 詳細は下記のいくつかのpull requestの具体的な最適化内容をご覧ください。
    https://github.com/microsoft/TypeScript/pull/36576
    https://github.com/microsoft/TypeScript/pull/36590
    https://github.com/microsoft/TypeScript/pull/36607
    https://github.com/microsoft/TypeScript/pull/36622
    https://github.com/microsoft/TypeScript/pull/36754
    https://github.com/microsoft/TypeScript/pull/36696
    4、条件文で起動していない関数を検出する
    3.7の時に、検査非起動関数エラーメッセージを導入し、3.9部分最適化しました。
    
    function hasImportantPermissions(): boolean {
     // ...
    }
    
    // Oops!
    if (hasImportantPermissions) {
    // ~~~~~~~~~~~~~~~~~~~~~~~
    // This condition will always return true since the function is always defined.
    // Did you mean to call it instead?
     deleteAllTheImportantFiles();
    }
    
    
    ただし、このエラーはif文の条件にのみ適用されます。現在は三元条件(すなわち文法)もこの機能をサポートしています。例えばcond ? trueExpr : falseExpr
    
    declare function listFilesOfDirectory(dirPath: string): string[];
    declare function isDirectory(): boolean;
    
    function getAllFiles(startFileName: string) {
     const result: string[] = [];
     traverse(startFileName);
     return result;
    
     function traverse(currentPath: string) {
      return isDirectory ?
      //  ~~~~~~~~~~~
      // This condition will always return true
      // since the function is always defined.
      // Did you mean to call it instead?
       listFilesOfDirectory(currentPath).forEach(traverse) :
       result.push(currentPath);
     }
    }
    
    
    5、エディタのアップグレード
    5.1 Common JSの自動補完
    新しいバージョンのもう一つの重大な改良は、CommunJSモジュールを使って自動的にJavaScriptファイルを導入することです。
    古いバージョンでは、Type Scriptは、ユーザにどんなファイルを使っても、ECMAScriptという形で導入しなければならないように強制的に要求しています。
    
    import * as fs from "fs";
    
    
    しかし、JavaScriptファイルを作成する時、多くのユーザーはECMScriptスタイルモジュールを使用しないつもりです。多くの友達がまだCommon JSスタイルのrequireを導入しています。例えば、
    
    const fs = require("fs");
    Type Scriptは現在、あなたが使用している導入タイプを自動的に検出できます。ファイルの様式が簡潔で統一されていることを保証します。現在は次のように自動的に導入される機能があります。
    
    const { readFile } = require('fs')
    5.2欠落した関数の戻り値の自動修復機能
    場合によっては、関数の最後のステートメントの値を返すことを忘れてしまうかもしれません。特に矢印関数に括弧を追加する場合。
    
    // before
    let f1 = () => 42
    
    // oops - not the same!
    let f2 = () => { 42 }
    
    
    6、重大な改善!
    6.1オプションチェーンと非null断言の違いを解析する
    ype Scriptは最近オプションのチェーン操作子に対するサポートを実現しましたが、広大な利用者のフィードバックによって、nullではなくオペレータを断言します(!)のオプションチェーン(?.)行動が直感にそぐわない。
    具体的には、従来のバージョンでは、コード:
    
    foo?.bar!.baz
    
    以下のJavaScriptコードに相当すると解釈されます。
    
    (foo?.bar).baz
    
    上記のコードの中で、括弧はオプションチェーンの「短絡」行為を阻止します。したがって、fooがundefinedと定義されていない場合、bazにアクセスすると、運転中にエラーが発生します。
    言い換えれば、多くの人は、上記のソースコードのセグメントは、以下のように解釈されるべきであると考えている。
    
    foo?.bar.baz
    
    において、fooがundefinedである場合、計算結果はundefinedとなります。
    これは大きな変化ですが、ほとんどのコードは新しい解釈シーンを考慮するために作られていると思います。古いものを使い続けたいなら、あります。操作子の左側に括弧を追加します。以下のようにします。
    
    (foo?.bar)!.baz
    参照
    https://www.typescriptlang.org/docs/home.html
    このページでは、Typecript 3.9の一般的な新しい特性一覧(おすすめ)についての記事を紹介します。Typeescript 3.9の新しい特性内容については、以前の記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。