typescript – 传递类作为参数导致“不可更新”错误

我试图将类作为一个参数传递给一些函数,这将实例化这个类并返回它。这是我的代码:

module A.Views {
  export class View { ... }
}

module A.App {
  export class MyApp {
    ...
    registerView(viewKlass:A.Views.View):void
    {
        var test = new viewKlass;
    } 
  }
}

当我试图编译这个,我得到:

(...): Value of type 'Views.View' is not newable.

我究竟做错了什么?

如果一个新的类型值是一个对象构造函数,我如何在运行时传递构造函数?

最佳答案
我们需要一些东西来表示typeof(MyClass)来区分功能签名中的对象。

请投票我为codeplex创建的问题:http://typescript.codeplex.com/workitem/246

无论如何,您实际上可以通过使用构造函数类型签名来解决您的问题。
考虑这个类:

class MyClass {
    constructor (private name: string) {
    }
}

要将该类作为可以在函数中实例化的类型,您实际上必须像这样复制类构造函数签名:

function sample(MyClass: new (name: string) => MyClass) {
    var obj = new MyClass("hello");
}

编辑:
在codeplex上有一个简单的解决方案:

您必须为您的类创建一个接口,如下所示:

interface IMyClass {
    new (name: string): MyClass;
}

然后,在你的函数签名中使用它:

function sample(MyClass: IMyClass) {
    var obj = new MyClass("hello");
}

转载注明原文:typescript – 传递类作为参数导致“不可更新”错误 - 代码日志