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」のフィールドを使用すると、問題が発生します。次のサンプルは、そのようなケースを示しています。

モジュールからのインターフェースをクラス内のフィールドとして使用する際の Typescript エラー

この問題は、インターフェイスをモジュール内に配置する場合にのみ発生します。それ以外の場合は、すべて正常に動作します。

この問題の解決策はありますか?

4

1 に答える 1

2

同じ名前のインターフェイスとフィールドがあるため、型の混乱があります。これがファイルで一般的であることは知っていlib.d.tsますが、新しい TypeScript コードを記述するときは、良い習慣ではないと思います。既存のコードを定義するために必要なもののようです。

(または他の何か)に名前var Canvasを変更すると、コードが機能します。var MyCanvas

Iたとえば、インターフェイスの前に を付ける傾向がありますICanvasが、これは (まだ) TypeScript の規則ではありません。

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

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