我无法使用 super 调用从具体类访问抽象类的服务属性,它只能与 this 一起使用。但是当我使用 super 时,打字稿不会显示任何类型错误
interface Service {
do(): void;
}
abstract class Abstract {
constructor(protected readonly service: Service) {}
abstract execute(): void;
}
class Concrete extends Abstract {
constructor(service: Service) {
super(service);
}
execute(): void {
super.service.do(); // <- if i replace "super" with "this", it works
}
}
class ServiceImpl implements Service {
do(): void {
console.log("i saved something");
}
}
const concrete = new Concrete(new ServiceImpl());
console.log(concrete.execute()); // <- it will throw error
此代码将抛出
TypeError: Cannot read properties of undefined (reading 'do')
我尝试使用 super 调用服务来提高代码的可读性,这样其他人就可以轻松地将 service 识别为抽象类的受保护成员。由于 Typescript 从超级调用中识别出service,通过类型检查器,我预计它会起作用,但事实并非如此