给出一个返回工厂的函数,如何注释该函数/工厂,使其包含正确的类型定义?
这是我的例子:
class item<T> {
constructor(a: T) {
this.a = a;
}
a: T
}
function generate(c) {
return function a(a) {
return new c(a);
}
}
const factory = generate(item); // I want this to always be annotated as <T> (a: T) => item<T>
const instance = factory('string'); // instance should now be of type item<string>
这可能是打字稿中的问题吗,还是应该将其推荐为一项新功能?
答案 0 :(得分:2)
对于非泛型类,我们可以在3.0中使用Tuples in rest parameters and spread expressions和Windows Authentication
将构造函数映射到类似的函数。
不幸的是,对于泛型类,在映射时无法保留类型参数。唯一的解决方案是在类中添加一个字段,该字段将告诉InstanceType
结果类型应该是什么。可以使用接口类合并来完成此操作,因此原始类不知道generate。
使用这两种方法(可能时自动执行,必要时手动执行)的可能解决方案如下所示:
generate