Skip to content

类型兼容性

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 常被描述为“看形状,不看名义”的原因。

基于 MIT 许可发布