【发布时间】:2022-01-02 16:07:06
【问题描述】:
这是我面临的错误:
src/Model.ts:11:16 - error TS2797: A mixin class that extends from a type variable containing an abstract construct signature must also be declared 'abstract'.
11 return class Foo2 extends Base {
~~~~
这是代码:
abstract class ModelBase {
bar() {
console.log("bar")
}
}
type GConstructor<T = {}> = abstract new (...args: any[]) => T;
type Foo = GConstructor<ModelBase>
function Foo2<TBase extends Foo>(Base: TBase) {
return class Foo2 extends Base {
foo() {
console.log(this.bar())
}
}
}
export const Model = Foo2(ModelBase)
如果我在 return 语句中添加abstract,如下所示:
return abstract class Foo2 extends Base {
我得到错误:
src/Model.ts:11:19 - error TS1005: ';' expected.
11 return abstract class Foo2 extends Base {
~~~~~
那么,我怎样才能做到这一点呢?本质上是向一个抽象类添加一个 mixin,从而产生另一个抽象类。
【问题讨论】:
-
不能返回抽象类,因为抽象类是 TypeScript,因此在运行时不存在。
-
我想这可能是an XY problem。请直接描述您的要求。
-
抽象类的重点是不能直接构造
-
@captain-yossarian 他不想实例化它,他只想在保留抽象性的同时扩展它。对我来说似乎是一个合法的要求????♂️
-
@TitianCernicova-Dragomir 当然,你是对的,我没有仔细阅读这个问题。你的答案看起来不错!
标签: typescript abstract-class mixins