8

KineticJSライブラリの.d.tsファイルを作成しようとしています。これまでに、次のインターフェイス宣言「kinect.d.ts」を作成しました(スタックオーバーフローのためにコードを少しトリミングしましたが、アイデアが得られることを願っています)

module Kinetic {

    interface Rect extends  Shape {
        constructor (config) ;
    }

    interface Shape extends Node
    { 

    }

    interface Node {
        constructor (config);
        clone(attrs): Node;
        getAbsoluteOpacity(): number;
        getAbsolutePosition(): any;       

        /*
        other methods removed for stackoverflow example
        */
    }
}

app.tsファイルにKinetic.Rectオブジェクトを作成するには、これで十分だと思いました。

/// <reference path="Kinetic.d.ts" />
var rect = new Kinetic.Rect({
          x: 239,
          y: 75,
          width: 100,
          height: 50        
        });

しかし、TypeScriptでKineticJSクラス(Rectなど)を使用するには、追加の作業が必要なようです。誰かがこれをアーカイブする方法についていくつかの指針を与えることができますか?

4

4 に答える 4

8

http://typescript.codeplex.com/SourceControl/changeset/view/fe3bc0bfce1f#samples/imageboard/mongodb.tsの TypeScript サンプル アプリをご覧になりましたか。

このリンクのコードは、mongodb ライブラリの定義を作成します。これと Sohnee の回答の違いの 1 つは、スタブ クラスであるリンクからの次のコード スニップとは対照的に、Sohnee がコンストラクターを実装することです。受け入れられた回答で、なぜ彼がアンビエント クラスのコンストラクターを実装したのかを Sohnee に尋ねるほどの評判はありませんか?

declare module "mongodb" {
   export class Server {
       constructor(host: string, port: number, opts?: any, moreopts?: any);
   }
   export class Db {
       constructor(databaseName: string, serverConfig: Server);
       public open(callback: ()=>void);
于 2012-10-05T13:50:14.407 に答える
5

Kinetic クラスのアンビエント定義を作成する私の作業例を次に示します。

interface Shape {
    x: number;
    y: number;
    width: number;
    height: number;
}

interface IKinetic {
    Rect(shape: Shape);
}

declare var Kinetic: IKinetic;

var rect = <Shape> new Kinetic.Rect({
  x: 239,
  y: 75,
  width: 100,
  height: 50        
});

declare var Kinetic: IKinetic;Kinetic が特定の型であることを TypeScript に伝えていたことに注意してください。

更新 - 例 2

interface IShape {
    x: number;
    y: number;
    width: number;
    height: number;
}

interface IRect extends IShape {

}

module Kinetic {
    export class Rect implements IRect {
        public x: number;
        public y: number;
        public width: number;
        public height: number;
        constructor(rect: IShape) {
            this.x = rect.x;
            this.y = rect.y;
            this.width = rect.width;
            this.height = rect.height;
        }
    }
}

var rect = new Kinetic.Rect({
  x: 239,
  y: 75,
  width: 100,
  height: 50        
});
于 2012-10-05T10:24:57.437 に答える
0

ITodoStorage は実際にはインターフェイスであり、TodoStorage は実装ですが、すべてのメンバーを実装する必要があるため、クラスを定義したくありません。代わりに、TodoStorage インターフェイスも作成します。最後に、 new キーワードを使用して var をコンストラクターとして宣言します。

declare interface ITodoStorage {
    get_todos() : TodoItem[];
    set_todos(value : TodoItem[]) : void;
}

declare interface TodoStorage extends ITodoStorage {
}

declare var TodoStorage : { 
    new (): TodoStorage;
}

次に、コンストラクターを呼び出すことができます

var storageService : ITodoStorage = new TodoStorage();

残念ながら、var は TodoStorage タイプを隠しています。

于 2012-11-24T23:24:01.907 に答える
0

これは古いものだと思いますが、完成した kinetic.d.ts ファイルはhttp://kineticjstypescript.codeplex.com/にあります。

于 2013-01-31T04:17:32.333 に答える