为什么 TypeScript 要求派生 class 调用 super(),即使父 class 没有构造函数?

Why does TypeScript require the deriving class to call super(), even though the parent class has no constructor?

我是基于 class 的编程新手,我正在研究用 TypeScript 制作的 API。

假设我有这个代码:

import { Router } from "express";

export default class BaseController {
  public router = Router();
}

我从中扩展了另一个 class:

import BaseController from "./BaseController";

export default FooController extends BaseController {
  constuctor() {
    // I will elaborate on this super later in the question
    super();
    this.router.get("/", this.faz);
  }

  private faz(req: Request, res: Response) {
    res.status(200).send("boo!");
  }
}

当我删除 super(); 时,由于以下错误消息,我的代码将无法编译:Constructors for derived classes must contain a 'super' call.

我知道super是用来调用父class的构造函数的,但是我的父class不需要也没有构造函数。这基本上意味着我正在调用一个空函数。

问题:当父 class 没有构造函数时,为什么我需要在派生 class 上调用 super();(所以如果我是正确的,你基本上不会调用任何东西)

您可以在 typescript playground

中查看如何将其转译为 javascript

根据您的示例 属性 初始化程序将移至构造函数中,因此需要调用 super

export default class BaseController {
    constructor() {
        this.router = Router();
    }
}