Moduł maszynopis i klasa jednocześnie?

głosy
4

Obecnie próbuję zbudować plik definicji maszynopis dla OpenLayers.

Problem polega na tym, że w OpenLayers istnieją pewne ćwiczenia, które przekładają się zarówno do modułu i klasy w maszynopisie.

Na przykład nie jest Protocolklasa w module OpenLayersi istnieje klasa Responsew module OpenLayers.Protocol.

Jak mogłem model, który na maszynie? Mogę zrobić Protocolklasę i zdefiniować Responseklasę jako wewnętrznej klasy, które są wywożone? Jak byś go o rozwiązanie tego problemu?

Utwórz 09/10/2012 o 12:51
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

Zadeklarować Responsejako staticpola Protocolz typem konstruktora, zwrócenie interfacektóry definiuje Responseklasę:

declare module OpenLayers {
    export interface IProtocolResponse {
        foo(): void;
    }

    export class Protocol {
        static Response: new () => IProtocolResponse;
    }
}

var response = new OpenLayers.Protocol.Response();
response.foo();

Edytować:

Albo jak Anders wskazuje w tym liście dyskusja pytanie , można mieć wiele konstruktorów do wewnętrznej klasy w ten sposób:

declare module OpenLayers {
    export interface IProtocolResponse {
        foo(): void;
    }

    export class Protocol {
        static Response: {
            new (): IProtocolResponse;
            new (string): IProtocolResponse;
        };
    }
}

var response = new OpenLayers.Protocol.Response('bar');
response.foo();

Główną wadą obu podejść jest, że nie można wywieść z klasy OpenLayers.Protocol.Response.

Odpowiedział 14/10/2012 o 03:13
źródło użytkownik

głosy
0

Oto moja odpowiedź aktualizowany, co mam nadzieję, że pomaga - powinien zacząć grę na określeniu OpenType:

declare module OpenType {
   export class Protocol {
       constructor();
       Request;
   }
}

var x = new OpenType.Protocol();
var y = new  x.Request();
var z = x.Request;
Odpowiedział 09/10/2012 o 14:37
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more