Skip to content

类之间的关系

在大多数情况下,TypeScript中的类在结构上与其他类型相同,是可以比较的。

例如,这两个类可以互相替代使用,因为它们是相同的:

typescript
class Point1 { 
  x = 0; 
  y = 0; 
}
class Point2 { 
  x = 0; 
  y = 0; 
}

// 正确 
const p: Point1 = new Point2();

同样地,即使没有明确的继承,类之间的子类型关系也是存在的:

typescript
class Person { 
  name: string; 
  age: number; 
}
class Employee { 
  name: string; 
  age: number; 
  salary: number; 
}

// 正确 
const p: Person = new Employee();

这听起来很简单,但有几种情况似乎比其他情况更奇怪。

空的类没有成员。在一个结构化类型系统中,一个没有成员的类型通常是其他任何东西的超类型。所以如果你写了一个空类(不要!),任何东西都可以用来代替它。

typescript
class Empty { 

}

function fn(x: Empty) { 
  // 不能用'x'做任何事 
}

// 以下调用均可 
!fn(window); 
fn({}); 
fn(fn);