网站搜索

typescript - 即使在构造函数中添加,仍然出现属性不存在错误 Angular


在创建一个网络应用程序时,我在处理其中一个服务时,在我的 IDE(VSCode)中遇到了一个异常错误:

Error, property adapter does not exist in DetailDataService

在大多数情况下,这个错误相当直接,无论我尝试添加什么,都没有声明,所以我应该声明缺少的变量或其他什么。然而,在这种情况下,考虑的变量已经在构造函数中声明了。

constructor(
    adapter: SuiteAdapterService,
    toastr: ToastrService,
    translate: TranslatePipe
  ) {}

但是每当我在我的函数中引用这些时(例如):

extractData(
    module: string,
    where_relate_field: string,
    where_field_value: string
  ): any {
    let params = this.initializeParams(
      module,
      where_relate_field,
      where_field_value
    );

    this.adapter.post("listRecords", params).subscribe(
      (response) => {
        this.records = response.records;
      },
      (error) => {
        let errmsg = this.translate.transform(
          "pages[login_page][responses][error][" + error.text + "]"
        );
        this.toastr.error(errmsg);
      }
    );
  }

IDE 对我显示了所有三个(adapter、toastr、translate)的错误,提示它们不存在。我觉得这很奇怪,因为我对其他服务做的是相同的操作,而且它们似乎都工作得很好。我以为是 IDE 的问题,于是换用了 Atom,但错误依然存在。我运行了 ng s 来看看是否只是 IDE 问题,结果发现错误某种程度上确实存在,因为它抛出了以下错误:

ERROR in src/app/services/dynamic-loading/data/detail/detail-data.service.ts(70,10): error TS2339: Property 'adapter' does not exist on type 'DetailDataService'.
src/app/services/dynamic-loading/data/detail/detail-data.service.ts(75,27): error TS2339: Property 'translate' does not exist on type 'DetailDataService'.
src/app/services/dynamic-loading/data/detail/detail-data.service.ts(78,14): error TS2339: Property 'toastr' does not exist on type 'DetailDataService'.

我在这里做错了什么?

答案#1

我觉得自己很笨。我忘了在构造函数中声明声明的作用域。本来应该是:

constructor(
    private adapter: SuiteAdapterService,
    private toastr: ToastrService,
    private translate: TranslatePipe
  ) {}

我觉得对于一种不是严格类型化的语言来说,有构造函数声明并且应该定义它们的作用域,这很令人困惑。也许这是以后再讨论的话题。