Typoskript Modul und gleichzeitig Klasse?

stimmen
4

Ich versuche zur Zeit eine Typoskript Definitionsdatei für Openlayers zu bauen.

Das Problem ist, dass in Openlayers gibt es bestimmte Klassen, die sowohl mit einem Modul und eine Klasse in Typoskript übersetzen würden.

Zum Beispiel gibt es die ProtocolKlasse im Modul OpenLayersund gibt es eine Klasse Responseim Modul OpenLayers.Protocol.

Wie könnte ich das in Typoskript modellieren? Kann ich Protocoleine Klasse und die definieren ResponseKlasse als innere Klasse , die exportiert wird? Wie würden Sie gehen über das Problem zu lösen?

Veröffentlicht am 09/10/2012 um 12:51
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
1

Deklarieren Responseals ein staticBereich des Protocolmit einem Konstruktor - Typ, eine Rückkehr interface, die das definiert , ResponseKlasse:

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

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

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

Bearbeiten:

Oder wie Anders in weist darauf hin , diese Diskussion Liste Frage , können Sie mehrere Konstrukteure für die innere Klasse auf diese Weise haben:

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();

Der größte Nachteil beiden Ansätze ist , dass Sie nicht eine Klasse aus ableiten können OpenLayers.Protocol.Response.

Beantwortet am 14/10/2012 um 03:13
quelle vom benutzer

stimmen
0

Hier ist meine Antwort aktualisiert, die hoffentlich hilft - es sollten Sie sich auf die Definition Opentype-Einstieg:

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

var x = new OpenType.Protocol();
var y = new  x.Request();
var z = x.Request;
Beantwortet am 09/10/2012 um 14:37
quelle vom benutzer

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