module tapuscrit et classe en même temps?

voix
4

J'essaie actuellement de construire un fichier de définition dactylographiée pour OpenLayers.

Le problème est que dans OpenLayers il y a certaines classes qui se traduirait à la fois un module et une classe dactylographiée.

Par exemple , il y a la Protocolclasse dans le module OpenLayerset il y a une classe Responsedans le module OpenLayers.Protocol.

Comment pourrais - je le modèle que dactylographiée? Puis - je faire Protocolune classe et définir la Responseclasse comme classe interne qui est exportée? Comment feriez - vous pour résoudre ce problème?

Créé 09/10/2012 à 12:51
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Déclarer Responsecomme un staticchamp d' Protocolun type de constructeur, renvoyant un interfacequi définit la Responseclasse:

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

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

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

Modifier:

Ou comme Anders souligne dans cette question de la liste de discussion , vous pouvez avoir plusieurs constructeurs pour la classe interne de cette façon:

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

Le principal inconvénient des deux approches est que vous ne pouvez pas dériver une classe de OpenLayers.Protocol.Response.

Créé 14/10/2012 à 03:13
source utilisateur

voix
0

Voici ma réponse à jour, je l'espère, aide - il devrait vous aider à démarrer sur la définition OpenType:

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

var x = new OpenType.Protocol();
var y = new  x.Request();
var z = x.Request;
Créé 09/10/2012 à 14:37
source utilisateur

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