ES2015における{ClassName}構文についての解説


ES2015における{ClassName}構文についての解説

1.前提知識となりますが、クラスとは、function型のインスタンスである。例として、任意のクラスClass01を定義し、typeof Class01を実行して戻り値が'function'であることをそれを証明します。補足の例として、下記構文を参考に。

    // 下にあるClass01定義と同じクラス(constructor)を定義している
    let Class01 =
      class Class01 {
        p1: string = '';
     }

    class Class01 {
      p1: string = '';
    }

2.{ClassName}についての説明です、同じ効果を持つ二つの構文を参考に

    // 下にある構文と同じ効果を持つ
    let v1 = { Class01 };

    let v1: { Class01: typeof Class01 } = {
      Class01: Class01  //プロパティClass01: function型の値Class01
    }

3.補足:Typeofオペレーターは実行時のみ働く仕様のようです。(同じfunctionなのにtypeof Class01 <> typeof Class02)

    class Class02 {
      p2: string = '';
    }
    let v2: { Class01: typeof Class01 } = {
      Class01: Class02  //エラー:typeof Class01 !== typeof Class02
    }