假设我有两节课:
class Element {
parent: Manager;
get() {
parent.table();
}
}
class Manager {
run(){}
table(){}
}
但是,说这是一个库,
run()
是Manager
唯一应该公开的方法。如果用户运行 table()
,灾难就会随之而来。我们可以将 table()
设为私有,
export class Manager {
run(){}
private table(){}
}
但这显然会导致
Element
尝试调用 table()
出现问题。这应该如何组织?
有人告诉我,在这种事情上加下划线前缀是常见的做法,以表示不敏感,例如
export class Manager {
run(){}
_table(){}
}
这有效!虽然我很好奇是否有更强大的替代方案。
我也考虑过使用函数而不是方法,即
function table(manager: Manager) {}
export class Manager {
run(){}
}
尽管这使得其他
Manager
私人成员无法在 table()
中使用。
使用索引属性表示法来获取类的私有成员。它是由 TypeScript 团队特意制作的,作为边缘情况的解决方法,在这种情况下,除了访问私有成员之外别无选择。它将非常容易阅读,不需要额外的代码,而且看起来很简单:
class Element {
parent: Manager;
get() {
const res = this.parent['table']();
res satisfies string; // It also correctly resolves all the typings
}
}
class Manager {
private table(): string{
return ''
}
}