类型兼容性 #
类型兼容性是 TypeScript 类型系统的一个核心特性,允许在某些情况下将一种类型赋值给另一种类型,即使它们不完全相同。
基本概念 #
TypeScript 使用结构化类型系统(structural typing),兼容性基于类型的形状(成员)而不是名称。如果目标类型的所有成员都在源类型中存在,则兼容。
使用场景 #
- 函数参数和返回值的类型检查。
- 接口和类的继承与实现。
- 泛型中的类型约束。
示例代码 #
interface Named {
name: string;
}
class Person {
name: string;
}
let p: Named;
p = new Person(); // 兼容,因为 Person 有 name 属性
// 函数兼容性
function greet(person: Named) {
console.log('Hello, ' + person.name);
}
function logName(x: { name: string }) {
console.log(x.name);
}
greet = logName; // 兼容
最佳实践 #
- 理解结构化类型以避免意外的兼容性错误。
- 在设计接口时,考虑兼容性以提高灵活性。
- 使用 never 类型或严格检查来限制不期望的兼容。