我想知道为什么我不能为使用以下函数生成的返回类定义私有成员。有谁知道为什么它不能私有和受保护?我在某处看到这段代码,但在他的 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.
错误消息表明您不能为导出的类表达式定义私有或受保护的属性。在您的代码中,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 类的引用。
您可以使用 get 关键字将您的 dumpLog() 方法定义为访问器。
get dumpLog() {
return this.completeLog;
}