54

既存のフレームワーク (openlayers.d.ts) を定義することに興味がありますが、OpenLayers.Layer が OpenLayers.Layer.Markers のクラスと名前空間の両方であるという事実を表現する方法がわかりません。これにより、マーカーはレイヤーのネストされたクラスになると思います。

利用方法:

l = new OpenLayers.Layer(...); // this is a base class, never do this
m = new OpenLayers.Layer.Markers(...);

typescript で Layer クラスと Markers クラスの両方をどのように宣言しますか?

4

6 に答える 6

15

名前空間/クラスのマージを使用して、ネストされたクラスと同等の効果を得ることができます。この例は、Pro TypeScript の第 1 章から改作されています。

クラスと名前空間、または関数と名前空間でマージを実行します。

いずれの場合も、マージが機能するためには、名前空間がクラスまたは関数の後に表示される必要があります。

適応例:

class Outer {

}

namespace Outer {
    export class Mid {

    }

    export module Mid {
        export class Inner {

        }
    }
}

var a = new Outer();
var b = new Outer.Mid();
var x = new Outer.Mid.Inner();
于 2012-11-21T17:24:33.110 に答える
8

2016年現在、これはより簡単だと思います:

class A {
    static B = class { }
}

var a = new A();
var b = new A.B();
于 2016-02-17T02:17:04.273 に答える
6

現在、ネストされたクラスはサポートされていません。

http://typescript.codeplex.com/workitem/460

于 2012-11-21T16:38:12.217 に答える
6

これは少し遅れていますが、他の人は役に立つかもしれません。これは、私が TS をだましてタスクを達成するために行った方法です。

declare module OpenLayers {
  interface Layer { 
   ....
  }

  interface Markers {
    ....
  }

  var Layer: {
    new(name:string, options?:any):Layer;
    prototype:Layer;
    Markers: { 
      new(params?:any):Markers;
      prototype: Markers;
    }
  }
}

var markers = new OpenLayers.Layer.Markers();
于 2013-07-03T23:12:06.093 に答える
3

これにはTypeScript のクラス式を使用します。

var OpenLayers = class {
    static Layer = class {
        static Markers = class {}
    }
}
于 2016-04-14T09:18:10.187 に答える