无法从接口函数返回新的派生对象

时间:2019-02-15 18:14:25

标签: typescript npm

打字稿代码无法编译。

编译器输出: 错误TS2416:不能将类型“ Vector2”中的属性“ deepcopy”分配给基本类型“ Vector”中的相同属性。

我昨天才开始使用打字稿,这似乎是一个小问题,但似乎找不到解决该问题的合适方法。

interface Vector {
    deepcopy() : this;
}

export class Vector2 implements Vector {
    constructor() {
    }

    deepcopy() {
        return new Vector2();
    }
}

有什么建议或线索吗?

2 个答案:

答案 0 :(得分:1)

interface Vector {
    deepcopy() : Vector;
}

export class Vector2 implements Vector {
    constructor() {
    }

    deepcopy() {
        return new Vector2();
    }
}

您的代码存在的问题是this不是类型。结果,Vector2与之不匹配。通过将其更改为Vector,您可以根据需要返回实现Vector接口的实例。

答案 1 :(得分:0)

我不确定这是否可以在您的特定情况下使用,但也许尝试使用LeftTable.Column = INVERSE_FUNCTION(value)代替:

abstract class

将正确键入以下内容:

export abstract class Vector {
  deepcopy(): this {
    return { ...this };
  }
}
export class Vector2 extends Vector {
  constructor() {
    super();
  }
  /* custom copy logic if necessary
  deepcopy(): this {
     ...
  }
  */
}