我有一个类Foo
,它有一个静态instances
属性,其中包含对所有创建实例的引用。然后,我有一个类Bar
扩展Foo
:
class Foo {
static instances: Foo[];
fooProp = "foo";
constructor() {
let ctor = this.constructor as typeof Foo;
ctor.instances.push(this);
}
}
class Bar extends Foo {
barProp = "bar";
}
但是,类型Bar.instances
是Foo[]
,而不是Bar[]
,这会导致以下错误:
let foo = new Foo();
let bar = new Bar();
Foo.instances[0].fooProp; // works
Bar.instances[0].barProp; // Property 'barProp' does not exist on type 'Foo'. ts(2339)
我尝试使用InstanceType<this>
的类型instances
,但它仍然无法正常工作:
class Foo {
static instances: InstanceType<this>[]; // A 'this' type is available only in a non-static member of a class or interface. ts(2526)
...
}
看起来我的问题与TypeScript repo 中关于多态“this”的问题有关。这是真的吗,我想做的事情目前是不可能的,或者我错过了什么?
游乐场链接在这里。