typescript - 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 )
解决方案
推荐阅读
- javascript - 从 URL 源检索 JSON 数据后如何在列表中返回 JSON 数据?
- c# - 属性网格复选框列表下拉列表
- ioctl - Fusion下ioctl的FIONBIO
- unity3d - 找不到 cs 1003 语法错误,“,”预期
- multithreading - 在配置可在 Powershell 中的多个线程上工作的进度条时需要帮助
- c++ - 为什么 for 语句中 init 语句末尾的分号是强制性的?
- reactjs - 使用路由器的 Codesplit 给出“init 不是函数”错误
- c++ - 无法从多个 UDP 设备接收数据
- javascript - 将对象值减去数组不正确
- python - 将嵌套 python 列表写入 csv 文件