Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeScript在静态上下文中从类创建新实例_Javascript_Typescript - Fatal编程技术网

Javascript 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

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(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);