http://www.typescriptlang.org/docs/handbook/interfaces.html “Interfaces Extending Classes”部分下的信息表明
接口甚至继承了基础的私有成员和受保护成员 类。
但是,当我尝试时,TypeScript会提示错误,指出派生类错误地实现了接口 - 并且缺少基类的私有和 protected 成员派生类。
以下是代码:
class View {
private content: any;
protected presentation: string;
public render() {
console.log("View::render()");
console.log("content: ", this.content);
console.log("presentation: ", this.presentation);
}
constructor(c: string, p: string) {
this.content = c;
this.presentation = p;
}
}
interface ViewShadow extends View {}
class MobileDisplay implements ViewShadow {
private content: any;
protected presentation: string;
public render() {
console.log("View::render()");
console.log("content: ", this.content);
console.log("presentation: ", this.presentation);
}
constructor(c: string, p: string) {
this.content = c;
this.presentation = p;
}
}
答案 0 :(得分:1)
您需要继续阅读文档。在你引用的那个之后的两个句子,它说:
这意味着当您创建一个扩展具有私有或受保护成员的类的接口时,该接口类型只能由该类或其子类实现。
(强调我的)。
所以你需要
class MobileDisplay extends View implements ViewShadow
答案 1 :(得分:1)
如果在接口中继承一个类,接口将继承该类的私有成员,但问题是您无法实现私有字段,编译器将不接受任何内容作为{{的实现除原始字段外的1}} / protected
个字段。因此,您的实现必须继承private
才能正确实现ViewShadow接口:
View
通常认为非公共字段不应该是要实现的接口的一部分。如果您只想要公共字段/方法,则可以使用映射类型:
class MobileDisplay extends View implements ViewShadow {
}