I\'m using TypeScript in my project and I have come across an issue. I\'m defining an interface like this:
interface IModuleMenuItem {
name: string;
}
Interfaces define "public" contracts and as such it doesn't make sense to have protected
or private
access modifier on interfaces, which are more of a, let's call it, implementation detail. As such you can't do what you want with an interface.
If you are want to make the property read-only to consumers, but overridable in a subclass then you can do something like this:
interface IModuleMenuItem {
getName(): string;
}
class ModuleMenuItem implements IModuleMenuItem {
private name;
public getName() {
return name;
}
protected setName(newName : string) {
name = newName;
}
}
I think in TypeScript 2.0 (not out yet) you will be able to use the readonly
access modifier if you were after initialization-time readonly field - https://basarat.gitbooks.io/typescript/content/docs/types/readonly.html
interface IModuleMenuItem {
readonly name : string;
}
class ModuleMenuItem implements IModuleMenuItem {
public readonly name : string;
constructor() {
name = "name";
}
}