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