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
}