クラスとインターフェース constructor、private、protected、派生クラス
プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発(Boris Cherny(著)、今村 謙士(監修)、原 隆文(翻訳)、オライリー・ジャパン)の5章(クラスとインターフェース)、5.13(練習問題)2の解答を求めてみる。
コード
// privateの場合
class C {
private constructor() { }
static create() {
return new C()
}
}
// 以下はエラー
// Constructor of class 'C' is private and only accessible within the class declaration.
// let c = new C()
let c = C.create()
console.log(c)
// 以下はエラー
// Cannot extend a class 'C'. Class constructor is marked as private.
// class D extends C { }
class D {
protected constructor() { }
static create() {
return new D()
}
}
// 以下はエラー
// onstructor of class 'D' is protected and only accessible within the class declaration.
// let d = new D()
let d = D.create()
console.log(d)
// protectedの場合、privateの場合と違って派生クラスを作成できる
class E extends D {
constructor() {
super()
}
}
let e = new E()
console.log(e)
入出力結果(Terminal, Zsh)
% ts-node sample2.ts
C {}
D {}
E {}
%