【问题标题】:Typescript: Pass an extra parameter打字稿:传递一个额外的参数
【发布时间】: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

标签: typescript typescript1.7


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢+1。那么这必须去文档。将帮助人们进入打字稿。
猜你喜欢
  • 2022-11-26
  • 2021-11-30
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
相关资源
最近更新 更多