如何在打字稿中使用通用返回值注释函数

时间:2018-10-19 17:48:12

标签: typescript generics

给出一个返回工厂的函数,如何注释该函数/工厂,使其包含正确的类型定义?

这是我的例子:

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>

这可能是打字稿中的问题吗,还是应该将其推荐为一项新功能?

1 个答案:

答案 0 :(得分:2)

对于非泛型类,我们可以在3.0中使用Tuples in rest parameters and spread expressionsWindows Authentication将构造函数映射到类似的函数。

不幸的是,对于泛型类,在映射时无法保留类型参数。唯一的解决方案是在类中添加一个字段,该字段将告诉InstanceType结果类型应该是什么。可以使用接口类合并来完成此操作,因此原始类不知道generate。

使用这两种方法(可能时自动执行,必要时手动执行)的可能解决方案如下所示:

generate