これも同様に機能し、おそらくオリジナルに近いです。
class Class1 {
id:number;
constructor(s: string) {
(n:number) => {
this.id = n;
}(s.length)
}
}
var t:Class1 = new Class1("HELLO");
console.log("Class1ID: " + t.id); // Output = Class1 ID: 5
参考までに、出力 JS を次に示します。
var Class1 = (function () {
function Class1(s) {
var _this = this;
(function (n) {
_this.id = n;
})(s.length);
}
return Class1;
})();
var t = new Class1("HELLO");
console.log("Class1 ID: " + t.id);
アップデート
ID だけでコンストラクターを呼び出せるようにする必要がある場合は、Steve が提案したように、ファクトリ メソッドを使用する必要があると思います。また、TS コンストラクターを非公開にできるとは思わないため、そのメソッドを非公開にする必要がある場合は、コンストラクターを完全に省いて、ファクトリ メソッドのペアを使用する必要があります。最初のインスタンスは次のようになります。
class Class1 {
constructor(public id:number) {} // Public, unfortunately.
static Fabricate(s:string):Class1 {
return new Class1(s.length);
}
}
var classA:Class1 = new Class1(1);
var classB:Class1 = Class1.Fabricate("Hello");
console.log(classA.id); // "1"
console.log(classB.id); // "5"
そして2番目は次のようなものです:
class Class1 {
id:number;
private static fabricate(n:number):Class1 {
var class1:Class1 = new Class1();
class1.id = n;
return class1;
}
static Fabricate(s:string):Class1 {
return fabricate(s.length);
}
}
var classA:Class1 = Class1.Fabricate("Hello");
console.log(classA.id); // "5"