Typescript 函数返回类不能定义私有成员

问题描述 投票:0回答:2

我想知道为什么我不能为使用以下函数生成的返回类定义私有成员。有谁知道为什么它不能私有和受保护?我在某处看到这段代码,但在他的 VS 代码中我没有看到任何错误,但它在我的 VS 代码中看到了。

function myLoggerClass() {
  return  class Logger {
    private completeLog: string = "";
    log(str: string) {
      console.log(str);
      this.completeLog += `${str}\n`;
    }
    dumpLog() {
      return this.completeLog;
    }
  }
}

错误说:

Errors in code
Property 'completeLog' of exported class expression may not be private or protected.
javascript typescript function class mixins
2个回答
0
投票

错误消息表明您不能为导出的类表达式定义私有或受保护的属性。在您的代码中,Logger 类是从 myLoggerClass 函数返回的,这意味着它是一个导出的类表达式。

此限制由 TypeScript 语言规范强加,以确保可以从模块外部访问导出类的所有成员。如果允许导出私有成员或受保护成员,那么导入该类的其他模块将无法访问它。

要修复此错误,您可以公开 completeLog 属性,或者将类定义移到函数之外,使其不是导出的类表达式。这是一个如何将类定义移出函数的示例:

class Logger {
  private completeLog: string = "";
  log(str: string) {
    console.log(str);
    this.completeLog += `${str}\n`;
  }
  dumpLog() {
    return this.completeLog;
  }
}

function myLoggerClass() {
  return Logger;
}

这段代码中,Logger类是在函数外定义的,可以有私有成员。 myLoggerClass 函数只是返回对 Logger 类的引用。


-1
投票

您可以使用 get 关键字将您的 dumpLog() 方法定义为访问器。

get dumpLog() {
  return this.completeLog;
}
© www.soinside.com 2019 - 2024. All rights reserved.