【发布时间】:2017-08-27 02:07:10
【问题描述】:
在TypeScript Handbook 中,它说:
类中的私有成员和受保护成员会影响它们的兼容性。 当检查一个类的实例的兼容性时,如果 实例包含一个私有成员,那么目标类型也必须 包含源自同一类的私有成员。 同样,这同样适用于具有受保护成员的实例。 这允许一个类与其超类兼容, 但不适用于来自不同继承层次结构的类 否则形状相同。
虽然 TypeScript 中的类型兼容性是结构化的(鸭子类型):
class Animal {
feet: number;
}
class Size {
feet: number;
}
let a: Animal = new Size; // Ok!
包含受保护/私有成员的类的情况实际上是名义上的:
class Animal {
private feet: number;
}
class Size {
private feet: number;
}
let a: Animal = new Size; // Error!
谁能解释为什么 TypeScript 中公共和受保护/私有成员之间存在这种不一致?
【问题讨论】:
标签: javascript oop typescript