我正在使用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类。有什么问题的想法吗?
答案 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