假设我们有一个包含此类的文件:
class Foo<T> {
bar: T;
constructor(bar: T) {
this.bar = bar;
}
}
function getFooType() {
return Foo;
}
在另一个文件中,传回getFooType()
的返回值:
function baz(fooType: ???) {
let foo1 = new fooType<number>(1);
let foo2 = new fooType<string>("2");
}
我一生都无法弄清楚应放入???
的内容。
自然选择Class<Foo<T>>
,但这迫使您通过执行T
关闭baz<T>(...)
,而我希望它保持打开状态;您将收到诸如“无法使用类型参数构造非多态Foo
[1]”之类的错误。您在哪里new fooFactory<...>()
因此,另一个明显的选择是使用Class<Foo>
,但是会出现错误“如果没有1个类型参数,则无法使用Foo
[1]”。在该参数上。
实际上,如果它具有泛型类型说明符,似乎无法传递类的类型。那正确吗?如果是这样,那就太令人失望了。
答案 0 :(得分:0)
因此,您只需要使用调用工厂函数的方式来描述类型:
function baz(fooType: <T>(bar: T) => Foo<T>) {
let foo1 = new fooType<number>(1);
let foo2 = new fooType<string>("2");
}
注意:
知道它使用依赖项注入机制非常重要,因为这可以解决泛型声明的问题。但是<T>
意味着typeof T
等于any
。您应该指定更准确的内容,例如<T: number | string>
。