Announcing TypeScript 4.3 RC
BRANK

Today we’re excited to announce our Release Candidate (RC) of TypeScript 4.3! Between now and the stable release of TypeScript 4.2, we expect no further changes apart from critical bug fixes. To get started using the RC, you can get it through NuGet,

devblogs.microsoft.com
Related Topics: TypeScript
2 comments
  • TypeScript 4.3 RC版リリース!overrideキーワードがやってきた!

    日本時間5/13、TypeScript 4.3 RC(リリース候補)が出ました。
    このバージョンでの主な変更点はこちら。言語仕様への変更に絞って記述しました。その他の変更点については、原文を参照してみてください。

    プロパティのsetterで複数の型引数を取れるように

    これは、「プロパティにセットするときはいろんな型の値を受け入れるけど、プロパティから値をゲットするときはnumber型」みたいなことができるようになったということです。

    以下の例を見れば一目瞭然。

    // こういう定義がOKになりました!
    interface Thing {
        get size(): number
        set size(value: number | string | boolean);
    }

    override キーワードと --noImplicitOverride フラグ

    ついに来ました、 override キーワード。
    メソッドにこのキーワードを付けておくと、親クラスにそのメソッドがちゃんとあるか、メソッドのシグネチャに互換性があるか…と言ったことをコンパイル時にチェックしてくれます。

    class SomeComponent {
        setVisible(value: boolean) {
            // ...
        }
    }
    class SpecializedComponent extends SomeComponent {
        override show() {
    //  ~~~~~~~~
    // エラー!このメソッドは'override'とマークされていますがが、親クラス'SomeComponent'には定義がありません
            // ...
        }
    
        // ...
    }

    そしてTypeScriptコンパイラに、 --noImplicitOverrideというフラグが追加されました。
    このフラグをONにしておくと、以下のような意図せぬオーバーライドを防ぐことができます。

    class Base {
        someHelperMethod() {
            // ...
        }
    }
    
    class Derived extends Base {
        // ローカルで使うヘルパーメソッド作っただけのつもりが、親クラスのメソッドをオーバーライドしてしまった…!Oops! We weren't trying to override here,
        someHelperMethod() {
            // ...
        }
    }

    テンプレート文字列型の改善

    テンプレート文字列型とは、 ${}で囲まれたプレースホルダ部分を、任意の文字列で置換可能な文字列型です。

    以前は、以下のs1型にs3型の文字列を代入することができませんでしたが、型の互換性がより汎用化され、代入が可能になったとのことです。

    declare let s1: `${number}-${number}-${number}`;
    declare let s2: `1-2-3`;
    declare let s3: `${number}-2-3`;
    
    s1 = s2;
    s1 = s3;

    以下のような代入操作もすべてOK。

    declare let s1: `${number}-${number}-${number}`;
    declare let s2: `1-2-3`;
    declare let s3: `${number}-2-3`;
    declare let s4: `1-${number}-3`;
    declare let s5: `1-2-${number}`;
    declare let s6: `${number}-2-${number}`;
    
    // Now *all of these* work!
    s1 = s2;
    s1 = s3;
    s1 = s4;
    s1 = s5;
    s1 = s6;

    ECMAScript #private クラス要素

    ECMAScriptの #private構文が、プロパティだけでなくメソッドやstaticプロパティ、メソッドにも利用可能になりました。

    と、ここで文字数が尽きてしまいました…残りは原文をご参照ください🙏