假设这个文件是 Foo.ts,那么需要再建一个 Foo.d.ts
文件才能满足您的需求
// Foo.d.ts
declare class FooBase<T> {
something(): any;
bar(): any;
}
declare class FooExtra<T> extends FooBase<T> {
foo(): any;
}
interface FooContructor {
new <T = string>(): T extends number ? FooBase<T> : FooExtra<T>;
}
export var Foo: FooContructor;
然后就可以正常调用了
import { Foo } from './Foo';
let foo = new Foo<number>();
foo.foo(); // 报错
let foo = new Foo<string>();
foo.foo(); // OK
如果各位大佬有更简单的方案,请务必反驳我,因为我也在不断探索
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…