【发布时间】:2016-05-17 23:41:30
【问题描述】:
我正在尝试来自documentation的以下代码
interface Point {
x: number;
y: number;
}
function getX(p: Point) {
return p.x;
}
class CPoint {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
}
getX(new CPoint(0, 0)); // Ok, fields match
getX({ x: 0, y: 0, color: "red" }); // Extra fields Ok
getX({ x: 0 }); // Error: supplied parameter does not match
根据代码注释,下面的行应该没问题。
getX({ x: 0, y: 0, color: "red" }); // Extra fields Ok
但我收到如下错误:
错误 TS2345:类型参数 '{ x: number; y:数字;颜色:字符串; }' 不可分配给“Point”类型的参数。对象字面量 只能指定已知属性,并且类型中不存在“颜色” '点'
但是下面的代码运行良好,我重写了其中我将参数设置为可选:
interface Point {
x: number;
y?: number;
color?: string;
}
function getX(p: Point) {
return p.x;
}
class CPoint {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
}
getX(new CPoint(0, 0)); // Ok, fields match
getX({ x: 0, y: 0, color: "red" }); // Extra fields Ok
getX({ x: 0 }); // Error: supplied parameter does not match
如果文档有误或者我在这里遗漏了什么,请有人帮助我
仅供参考:
- 打字稿 v1.7.5
- Visual Studio 代码
截图:
【问题讨论】:
-
在typescript playground 上,您的代码按预期工作。这可能是编辑器的问题
-
我刚刚在我的电脑上用 Visual Studio 代码试了一下,我没有任何错误。我有打字稿版本 1.7.5
-
哦对了..能分享一下VS版本吗?
-
我已经添加了截图。
-
版本 0.10.6 Shell 0.3435 节点 4.1.1 image