首页 > 解决方案 > 构造函数作为参数:将类的泛型推断为函数

问题描述

如何让 typescript 编译器在这个例子中推断出正确的类型?

interface A<T> {
  do(param: T): void
}

class A2 implements A<string>{
  do(param){}
}

function createA<T>(constr: new () => A<T>, param: T){}

createA(A2, "")

在这里它不会编译并且 T 被推断为任何类型

标签: typescript

解决方案


您还需要使类成为通用类,以便您可以告诉 typescript 接口参数和函数参数属于同一类型,而无需重复自己:

class A2<T extends string> implements A<T>{
  go(param: T) {
     param.split('') // string method is allowed here
  }
}

操场


推荐阅读