Ответ 1
Интерфейсы определяют "публичные" контракты и, как таковые, не имеет смысла иметь protected
или private
модификатор доступа на интерфейсах, которые более напоминают, позволяют называть его, детали реализации. Таким образом, вы не можете делать то, что хотите, с помощью интерфейса.
Если вы хотите сделать свойство доступным только для чтения для потребителей, но переопределяемым в подклассе, вы можете сделать что-то вроде этого:
interface IModuleMenuItem {
getName(): string;
}
class ModuleMenuItem implements IModuleMenuItem {
private name;
public getName() {
return name;
}
protected setName(newName : string) {
name = newName;
}
}
Я думаю, что в TypeScript 2.0 (еще не до конца) вы сможете использовать модификатор readonly
access, если вы были после поля readinly с инициализацией - 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";
}
}