在Typescript中如何获取在工厂(ish)函数中实例化的类上的方法的通用返回类型

在下面的示例代码中,TypeScript 无法推断函数中的泛型类型UfooBar因此返回类型fooRef.doIt()unknown。为什么会这样,我需要修改什么才能获得正确的返回类型?

interface Foo<T> {
  foo(): T;
}

class Bar implements Foo<string> {
  foo(): string {
    return 'Bar';
  }
}

class Baz implements Foo<number> {
  foo(): number {
    return 43;
  }
}

class FooRef<T extends Foo<U>, U> {
  constructor(private instance: T) {}

  doIt() {
    return this.instance.foo();
  }
}

function fooBar<T extends Foo<U>, U>(foo: new (...args: any[]) => T) {
  return new FooRef(new foo());
}

const barRef = fooBar(Bar);
barRef.doIt(); // unknown, expected string

const bazRef = fooBar(Baz);
bazRef.doIt(); // unknown, expected number

以上是在Typescript中如何获取在工厂(ish)函数中实例化的类上的方法的通用返回类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>