typescript :错误TS2377:衍生类别的建构函式必须包含'super'呼叫

jgovgodb  于 2022-11-18  发布在  TypeScript
关注(0)|答案(2)|浏览(144)

我正在尝试实现这个Stackblitz example的带进度条的angular-upload-file-with-progress-bar,但是在我的代码中

export class UploadDocumentTemplateComponent extends FieldType {}

我有这一行是因为它我得到了这个错误

错误TS 2377:派生类的构造函数必须包含“super”调用。

如何解决这个问题?

mo49yndu

mo49yndu1#

只需要在构造函数中

constructor()
{
   super()
}
7gcisfzg

7gcisfzg2#

为了提供一个更完整的答案或解释为什么要这样做,单词super是对UploadDocumentTemplateComponent的超类或父类FieldType的引用。
如果调用了子类的构造函数,这里不会显示,但无论何时调用,都需要调用父类的构造函数方法。
你这样做:

export class UploadDocumentTemplateComponent extends FieldType {
  constructor() {
    super();
  }
}

即使你传入了super();,你仍然会看到一个错误,特别是当你有以下情况时:

class FieldType {
  constructor(public color: string) {}
}

class UploadDocumentTemplateComponent extends FieldType {
  constructor() {
    super():
  }
}

此时,您可以按如下方式解决该问题:

class FieldType {
  constructor(public color: string) {}
}

class UploadDocumentTemplateComponent extends FieldType {
  constructor() {
    super('red'):
  }
}

但很可能你不想这样做,很可能我们希望在你创建color时,它仍然作为你的UploadDocumentTemplateComponent的一个参数。
因此,我们可以像这样为UploadDocumentTemplateComponent构造函数引入一个参数:

class FieldType {
  constructor(public color: string) {}
}

class UploadDocumentTemplateComponent extends FieldType {
  constructor(color: string) {
    super('red'):
  }
}

现在,另一个需要注意的细节是访问修饰符,因此请注意,在本示例中,我没有添加public修饰符。我没有添加public关键字,因为我们不想在colorUploadDocumentTemplateComponent中重新分配或创建新字段,在我的示例中,字段color属于FieldType
这就是为什么我没有把修改器的public
现在我们调用父类的构造函数,这里的超类,我们不会传入硬编码的红色,而是可以传入颜色,如下所示:

class FieldType {
  constructor(public color: string) {}
}

class UploadDocumentTemplateComponent extends FieldType {
  constructor(color: string) {
    super(color):
  }
}

相关问题