gpt4 book ai didi

TypeScript:基类中的多态返回类型?

转载 作者:搜寻专家 更新时间:2023-10-30 22:07:06 25 4
gpt4 key购买 nike

我有一个基类(Base)和两个子类A和B。

Base 有一个方法 f 可以创建当前类的实例并返回它。我如何确保当您调用 A.f() 时,它返回 A 的实例而不是 Base,对于 B 也是如此?我不想在 A 或 B 上定义此方法。

下面是一些示例代码:

class Base {
name: string;

constructor(name: string) { this.name = name; }

f(): Base /* ? */ {
return Base(name); /* or A(name) or B(name) depending on what "this" is

}
}

class A extends Base { /* stuff */ }

class B extends Base { /* stuff */ }

var a = new A();
a.f() -> returns an instance of A, not Base

最佳答案

您可以利用 constructor 属性:

class Base {
name: string;

constructor(name: string) { this.name = name; }

f(name): Base {
var c:any = this.constructor;
return new c(name); /* or A(name) or B(name) depending on what "this" is */
}
}

class A extends Base { /* stuff */ }

class B extends Base { /* stuff */ }

var a = new A("something");
var foo = a.f("foo") // -> returns an instance of A, not Base
console.log(foo.constructor); // "A"

var b = new B("something else");
var bar = b.f("bar");
console.log(bar.constructor); // "B"

关于TypeScript:基类中的多态返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com