这也有效,并且可能更接近原版:
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"
第二个是这样的:
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"