我正在写几个打字稿类,这个问题有问题
// BasePlugin.ts
export abstract class Base {
protected abstract readonly commands: string[];
}
// Loader.ts
export const plugins: Base[] = [...] // A lot of plugins that extend Base that are already instantiated
// Help.ts
import { plugins } from './Loader'
export default class Help extends Base {
commands = [
'$help => sends this message'
];
getAllHelp(): void {
plugins.forEach(plugin => {
plugin.commands.forEach(command => {
...
)};
)};
...
}
}
我遇到plugin.command
错误消息时遇到错误
[ts] Property 'commands' is protected and only accessible through an
instance of class 'Help'.
我可能是错的,但我认为在访问它时我已经在帮助内部了。我在一个扩展的类中Base
,为什么我不能commands
从其他Base
那里访问该数组呢?
发布于 2018-08-07 15:27:33
与大多数具有protected
概念的编程语言一样,规则是Help
只能访问实例上的受保护成员Help
,因为这应该与实现Help
类相关。如果任何子类Base
可以访问任何实例的受保护成员Base
,那么任何代码都可以Base
通过定义子类来访问任何实例的受保护成员Base
,这类似于仅仅使成员公开。
https://stackoverflow.com/questions/-100001989
复制相似问题