首先我们要清楚 private
、 protected
现阶段只是javascript
中的保留字(Reserved words
),而非关键字(Keywords
)。因此TypeScript
中的纯类型声明语句,编译后都会被擦除。
class Person {
public name: string;
protected age: number;
private isMarried: boolean;
}
//编译结果
class Person {
}
TypeScript是一个结构类型语言。当比较两个不同的类型时,不管它们来自哪里,如果所有成员的类型都是兼容的,那么就说这些类型本身是兼容的。
interface Named {
name: string;
}
class Bar {
name: string;
}
class Foo {
name: string;
}
// OK, because of structural typing
let a: Named = new Person(); //✔️
let b: Foo = new Bar(); //✔️
由于 TypeScript
属性声明默认是 public
,所以上面可以以 b.name
形式访问,而java
则默认是protected
。
但是,当比较具有 private
成员或 protected
成员的类型时,会区别对待这些类型。如果其中一种类型具有private成员,那么另一种类型必须具有来源于同一处声明的private成员。这同样适用于protected成员。
class Bar {
private name: string;
}
class Foo {
private name: string;