首页 > 解决方案 > Typescript:结构类型检查具有不一致的行为

问题描述

TypeScript 使用结构类型,因为如果它们的成员兼容,那么这两种类型是兼容的:

class Point2D {
  x: number = 1
  y: number = 2
}

class Point3D {
  x: number = 1
  y: number = 2
  z: number = 3
}

function iTake2D(p:Point2D) { /* do something */ }

const threeD:Point3D = new Point3D()

iTake2D(threeD)         // okay
iTake2D(new Point3D())  // okay

但是,在下面的示例中,结构类型检查似乎失败了:

interface Point2D {
  x: number
  y: number
}

interface Point3D {
  x: number
  y: number
  z: number
}

function iTake2D(p:Point2D) { /* do something */ }

const threeD:Point3D =  { x: 1, y: 3, z: 1 }

iTake2D(threeD)                // okay
iTake2D({ x: 1, y: 3, z: 1 })  // Not okay!
                   // ^^^^
                   // [tsserver 2345] [E] Argument of type '{ x: number; y: number; z: number; }'
                   //  is not assignable to parameter of type 'Point2D'.
                   //    Object literal may only specify known properties, and 'z' does not exist in
                   // type 'Point2D'.

我错过了什么?请帮忙!

以下是上述两个示例的 Typescript 游乐场链接:( link-to-eg-1 )、( link-to-eg-2 )

标签: typescript

解决方案


推荐阅读