在没有明确声明子类(扩展基类型)

时间:2015-08-24 08:32:51

标签: generics typescript

是否可以在没有事先声明子类的情况下引用具有指定泛型参数的泛型类型? 我不知道如何描述它所以这里是代码:

registerView(CarView); // I can do this
registerView(View<Car>); // ... but I can't this. any way to avoid declaring CarView-like subclass?

class View<T> { }
class CarView extends View<Car> { }
class Car { }

function registerView(v: Object){ }

注意我来自C#background等。这就是我用C#做的事情

class View<T> {}
class Car {}
class CarView: View<Car>{}

void Main()
{
    registerView(typeof(CarView));
    registerView(typeof(View<Car>));
}
void registerView(Type t){}

1 个答案:

答案 0 :(得分:1)

正如评论中所讨论的,这可能不起作用,因为泛型不会出现在已编译的JavaScript中,因此在registerView(View<Car>)registerView(View<string>)之类的语句中运行时没有区别,所以编译器可能只是警告你。

因此,您也可以传入registerView(View)

在旁注中,在这种情况下,您可能希望更改函数以处理泛型参数。以下是从typeof View - 类创建新视图的函数示例。

class View<T> { }
class Car { }

function createView<T>(view: typeof View){ return new view<T>(); }

var v = createView<Car>(View); // v is typed as View<Car>