Typescript 是否可以获取InstanceType<;T>;使用抽象类?
我显然希望允许它引用实现而不是抽象本身,同时仍然只依赖抽象接口定义。您可以使用Typescript 是否可以获取InstanceType<;T>;使用抽象类?,typescript,Typescript,我显然希望允许它引用实现而不是抽象本身,同时仍然只依赖抽象接口定义。您可以使用原型的类型,而不是构造函数返回的类型 type AbstractInstanceType<T> = T extends { prototype: infer U } ? U : never abstract class Foo{ foo:number } declare var foo: AbstractInstanceType<typeof Foo>; foo.foo
原型的类型,而不是构造函数返回的类型
type AbstractInstanceType<T> = T extends { prototype: infer U } ?
U : never
abstract class Foo{
foo:number
}
declare var foo: AbstractInstanceType<typeof Foo>;
foo.foo //ok
伟大的答案!你知道如何使用工厂静态方法工作吗?这可以得到我想要的实例类型,它可以在我所有的方法上工作,但是当我想做新的This()时,我得到的是T extends typeof AbstractClass,它不喜欢我。我尝试添加一个带有if(this===ModelResource)抛出新错误('cannotconstruction on abstract types')的类型保护代码>在start@NathanielTucker编辑答案以添加静态工厂
abstract class Foo{
foo: number
static create<T extends Foo>(this: new () => T) {
return new this();
}
static createWithArgs<T extends Foo, A extends any[]>(this: new (...a: A) => T, ...a: A) {
return new this(...a);
}
}
class Bar extends Foo { }
class Baz extends Foo {
constructor(public n: string) {
super();
}
}
Bar.create()
Baz.createWithArgs("")