我正在尝试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'类型的参数。对象文字 可能只指定已知属性,并且颜色为'在类型中不存在 '点'
但是下面的代码运行良好,我重写了,其中我将params作为可选:
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
如果文档错误或我在这里遗漏了某些内容,请有人帮助我吗
仅供参考我使用:
截图:
答案 0 :(得分:1)
文档已过期。过去可以添加额外的属性,但在TypeScript 1.6中,他们changed the behaviour。
如果你想在TS 1.6+中使用它,那么你必须做一个类型断言:
getX({ x: 0, y: 0, color: "red" } as Point); // no error