Javascript TypeScript在静态上下文中从类创建新实例
TypeScript中有没有一种方法可以从静态方法以通用方式创建新实例 我想做一些类似的事情:Javascript TypeScript在静态上下文中从类创建新实例,javascript,typescript,Javascript,Typescript,TypeScript中有没有一种方法可以从静态方法以通用方式创建新实例 我想做一些类似的事情: class Base { static getInstance() { return new self(); // i need this line :) } } class Test extends Base { } class NextTest extends Base { } var test = Test.getInstance(); assert(te
class Base {
static getInstance() {
return new self(); // i need this line :)
}
}
class Test extends Base {
}
class NextTest extends Base {
}
var test = Test.getInstance();
assert(test instanceof Test).toBe(true);
var nextTest = NextTest.getInstance();
assert(nextTest instanceof NextTest).toBe(true);
如果有人以前做过这样的事情,能帮我,那将是非常有帮助的。也许有一种JavaScript方式
提前感谢。Hack:)
您还可以使用类名本身,在您的示例中,类名是Base
static getInstance() {
return new Base()
}
下面是另一个示例,它在名为createInstance的静态函数中使用Greeter类名,您可以在
希望有帮助。我很好奇。。。为什么这会有用?我将使用集成的RESTful客户端构建TypeScript模型。因此,您可以导入TestModel并调用TestModel.objects.all(),它需要返回一个TestModel:D。无论如何,对象类(实际上是REST客户端)需要知道要填充哪个模型。谢谢。。我总是使用静态属性来尝试我的方法,而不是使用类似于“static prop:Manager=new Manager(new this);”的方法:D-未编译:)我将使用静态方法当我尝试此操作时,会出现以下错误:
错误TS2351:无法将“new”与类型缺少调用或构造签名的表达式一起使用。
如何调用super?不起作用,因为我输入了错误的类型。这是2年前正确回答的。您的答案没有按照问题返回子类。谢谢@mrm的更新。没有注意到上面的子类要求。我只是尝试了不同的代码,找到了一个用基类代替“this”的例子,只是想详细说明一下用classname代替这个,如果没有子类需求,它也可以工作,虽然还没有测试出来,但我相信你说的,因为你已经测试过了。感谢您指出这一点,帮助其他用户。
static getInstance() {
return new Base()
}
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
static createInstance(message: any) {
return new Greeter(message);
}
}
let greeter = Greeter.createInstance("world");
let button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function() {
alert(greeter.greet());
}
document.body.appendChild(button);