打字稿:传递一个额外的参数

时间:2016-02-08 10:32:54

标签: typescript typescript1.7

我正在尝试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

如果文档错误或我在这里遗漏了某些内容,请有人帮助我吗

仅供参考我使用:

  • Typescript v1.7.5
  • Visual Studio代码

截图:

enter image description here

1 个答案:

答案 0 :(得分:1)

文档已过期。过去可以添加额外的属性,但在TypeScript 1.6中,他们changed the behaviour

如果你想在TS 1.6+中使用它,那么你必须做一个类型断言:

getX({ x: 0, y: 0, color: "red" } as Point); // no error