TypeScript 面试题
目录

请解释 TypeScript 的类型兼容性 (Type Compatibility) 的规则

· 约 4 分钟读完 · 第 90 / 256 章

推荐答案

TypeScript 的类型兼容性规则基于结构化类型系统(Structural Typing),这意味着类型兼容性是通过检查类型的结构(即成员)来确定的,而不是通过显式的类型声明。以下是 TypeScript 类型兼容性的主要规则:

  1. 属性兼容性:如果类型 A 的所有成员都在类型 B 中存在,并且类型 B 的成员类型是类型 A 成员类型的子类型或相同类型,那么类型 A 兼容类型 B。

  2. 函数兼容性:函数的兼容性检查包括参数类型和返回类型。如果函数 A 的参数类型是函数 B 参数类型的子类型或相同类型,并且函数 A 的返回类型是函数 B 返回类型的超类型或相同类型,那么函数 A 兼容函数 B。

  3. 可选属性和多余属性:如果类型 A 包含可选属性,而类型 B 中没有这些属性,类型 A 仍然兼容类型 B。同样,如果类型 B 包含多余属性,只要这些属性不是必须的,类型 A 仍然兼容类型 B。

  4. 类和接口的兼容性:类和接口的兼容性检查与对象类型的兼容性检查类似。如果类 A 实现了接口 B,那么类 A 的实例兼容接口 B。

  5. 泛型兼容性:泛型类型的兼容性取决于类型参数的约束。如果泛型类型 A 的类型参数是泛型类型 B 类型参数的子类型或相同类型,那么泛型类型 A 兼容泛型类型 B。

本题详细解读

TypeScript 的类型兼容性规则是 TypeScript 类型系统的核心之一,它允许开发者在不显式声明类型的情况下,通过类型的结构来判断类型是否兼容。这种机制使得 TypeScript 在保持类型安全的同时,提供了更大的灵活性。

属性兼容性

属性兼容性规则是 TypeScript 类型兼容性的基础。它要求一个类型的所有成员在另一个类型中都必须存在,并且类型必须匹配或兼容。例如:

函数兼容性

函数兼容性规则涉及到参数类型和返回类型的检查。TypeScript 使用协变(covariance)和逆变(contravariance)的概念来处理函数类型的兼容性。例如:

可选属性和多余属性

可选属性和多余属性的处理使得 TypeScript 在处理对象类型时更加灵活。例如:

类和接口的兼容性

类和接口的兼容性规则允许开发者通过接口来约束类的实例。例如:

泛型兼容性

泛型兼容性规则确保了泛型类型在类型参数约束下的兼容性。例如:

通过这些规则,TypeScript 能够在编译时检查类型兼容性,从而帮助开发者避免潜在的类型错误。