【发布时间】:2021-07-21 07:11:56
【问题描述】:
我有一个类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 存储库中关于多态“this”的this issue 有关。这是真的吗?我想做的事情目前是不可能的,还是我错过了什么?
游乐场链接here。
【问题讨论】:
-
tl;dr TypeScript 不跟踪突变。
push方法会改变您的原始数组。见我的文章:catchts.com/mutations
标签: typescript this typescript-class