4

我正在为fabric.js 提供一个类型定义文件。一般结构如以下示例所示:

declare module fabric {
   export interface Canvas {
      selectionBorderColor: string;
      selectionColor: string;
      ...
   }

   var Canvas: {
      new (): Canvas;
   }
}

这种模式允许我以“类似接口”的方式使用 fabric.Canvas,以便变量与 fabric.Canvas 接口相关联。同时它允许我调用“静态成员”(例如fabric.Canvas的构造函数)。

但这在类中使用接口“fabric.Canvas”的字段时会导致问题。以下示例显示了这种情况:

将模块中的接口用作类中的字段时出现打字稿错误

仅在将接口放置在模块中时才会出现此问题,否则一切正常。

这个问题有什么解决方案吗?

4

1 回答 1

2

存在一些类型混淆,因为您有一个同名的接口和一个字段 - 我知道这在lib.d.ts文件中很常见,但我认为在编写新的 TypeScript 代码时这不是一个好习惯。这似乎是定义现有代码的必要条件。

如果您重命名var Canvasvar MyCanvas(或其他任何名称),您的代码就可以工作。

例如,我倾向于在我的接口前加上一个IICanvas但这还不是 TypeScript 约定。

declare module fabric {
   export class Canvas {
      selectionBorderColor: string;
      selectionColor: string;
   }
}

class MyClass {
    canvas: fabric.Canvas;
}
于 2012-12-25T17:39:32.223 回答