如果我有:
var greeter: Greeter = new Sausage();
Run Code Online (Sandbox Code Playgroud)
并且Greeter类和Sausage类都具有相同的功能和属性,变量greeter将很高兴地填满Sausage... ...我怎么能阻止它?
例如,以下代码编译正常:(
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
class Sausage {
size: number;
name: string;
greeting: string;
constructor() {
this.size = this.SausageLogic();
}
private SausageLogic(): number {
return this.size * 3;
}
greet() {
return "Hello, ";
}
}
var greeter: Greeter = new Sausage();
Run Code Online (Sandbox Code Playgroud)
TypeScript使用结构类型系统.即使你没有说Sausage extends Greeter,Sausage它仍然是一个子类型,Greeter因为它至少有所有相同的成员Greeter.请注意,您可以使用a Greeter(访问其greeting属性或调用其greet方法)执行的任何操作都是合法的Sausage.
如果你的方法添加foo到Greeter,或删除greeting财产Sausage,例如,代码最后一行将成为一个错误.任何private成员也足以导致结构不匹配(除非Sausage明确派生Greeter).
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |