在Typescript中如何获取在工厂(ish)函数中实例化的类上的方法的通用返回类型
在下面的示例代码中,TypeScript 无法推断函数中的泛型类型U,fooBar因此返回类型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
THE END
二维码