Typescript-尝试扩展Class原型时类型上的属性不存在

时间:2018-11-25 04:04:22

标签: typescript prototype

我正在使用Typescript和FabricJS,并试图扩展'Point'类。看起来是这样的:

export class Point {
    x: number;
    y: number;

    constructor(x: number, y: number);

    add(that: Point): Point;
    addEquals(that: Point): Point;
    // ...(more methods)
}

这是我尝试扩展它并在另一个文件中添加方法的方法:

import { Point } from 'fabric/fabric-impl';

export interface Point {
    a(): any;
}
Point.prototype.a = function () { }; // line that gives error

我在这里收到错误"[ts] Property 'a' does not exist on type 'Point'. [2339]".

通过创建子类,我可以使用Typescript的“扩展”来获得类似于此工作的东西:

interface myPoint {
    a: any;
}

class myPoint extends Point {    
    constructor(x: number, y: number) {
        super(x, y);
    }

}
myPoint.prototype.a = function () { };

这很好用,但是我宁愿直接将方法直接添加到Point类。有什么问题的想法吗?

1 个答案:

答案 0 :(得分:1)

您需要将Point接口放在模块声明中。这将在原始模块中扩展原始类型,而不是声明新类型:

import { Point } from 'fabric/fabric-impl';

declare module 'fabric/fabric-impl' {
  export interface Point {
      a(): any;
  }
}
Point.prototype.a = function () { }; // ok now