假设我们有一个包含此类的文件:
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>>
,但这迫使你通过执行baz<T>(...)
来关闭T
,而我希望它保持打开;在执行new fooFactory<...>()
时,会出现类似"无法用类型参数构造非多态Foo
[1]"的错误
因此,另一个明显的选择是使用Class<Foo>
,但在该参数上会出现错误"如果没有1个类型参数,就无法使用Foo
[1]"。
事实上,如果类具有泛型类型说明符,则似乎不可能传递该类的类型。是这样吗?如果是这样的话,那就太令人失望了。
所以你只需要像调用工厂函数一样描述打字:
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>