主题
类型兼容性
TypeScript 使用结构化类型系统。
类型检查主要关注值的形状是否满足要求,而不是它们是否来自同一个显式声明。
对象兼容
如果一个对象至少拥有目标类型要求的属性,就可以赋值给该目标类型。
ts
type Point2D = {
x: number
y: number
}
type Point3D = {
x: number
y: number
z: number
}
const point3d: Point3D = { x: 1, y: 2, z: 3 }
const point2d: Point2D = point3d接口兼容
接口之间同样遵循结构兼容原则。
ts
interface Animal {
name: string
}
interface Dog {
name: string
breed: string
}
const dog: Dog = {
name: 'Lucky',
breed: 'Golden Retriever',
}
const animal: Animal = dog函数兼容
函数兼容主要看参数和返回值是否满足目标类型要求。
ts
type Handler = (value: string) => void
const logMessage = (value: string) => {
console.log(value)
}
const handler: Handler = logMessage理解方式
可以把“兼容”理解为:
- 目标类型要求什么
- 当前值是否至少能满足这些要求
这也是 TypeScript 常被描述为“看形状,不看名义”的原因。
