MST

星途 面试题库

面试题:TypeScript 类结构化类型的类型兼容性

假设我们有两个类 `ClassA` 和 `ClassB`,`ClassA` 有属性 `prop1` 和 `method1`,`ClassB` 有属性 `prop1`、`prop2` 和 `method1`。请解释在 TypeScript 结构化类型系统中,`ClassA` 类型的变量能否赋值给 `ClassB` 类型的变量,反之是否可行,并说明背后的类型兼容性规则和原因。
31.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. ClassA 类型的变量能否赋值给 ClassB 类型的变量
    • 答案:可以。
    • 类型兼容性规则及原因:在TypeScript的结构化类型系统中,当将一个类型赋值给另一个类型时,TypeScript检查目标类型是否至少包含源类型的所有属性。ClassA 有属性 prop1method1ClassB 包含 prop1method1(并且还有额外的 prop2)。所以 ClassA 类型的变量可以赋值给 ClassB 类型的变量,因为 ClassB 满足 ClassA 的结构要求。
  2. ClassB 类型的变量能否赋值给 ClassA 类型的变量
    • 答案:不可以。
    • 类型兼容性规则及原因ClassB 有属性 prop2,而 ClassA 没有 prop2。按照TypeScript结构化类型系统的规则,目标类型(ClassA)不包含源类型(ClassB)的所有属性,所以 ClassB 类型的变量不能赋值给 ClassA 类型的变量。