Comment puis-je créer des déclarations ambiante de classe dactylographiée

voix
7

Je suis en train de créer un fichier .d.ts pour la bibliothèque KineticJS. Jusqu'à présent, j'ai créé le « kinect.d.ts » déclaration d'interface suivante. (Je recadrée un peu le code pour stackoverflow mais j'espère que vous avez l'idée)

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
        */
    }
}

J'espérais ce serait suffisant pour pouvoir créer un objet Kinetic.Rect dans mon fichier app.ts

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

Mais il semble que je dois faire un travail supplémentaire pour utiliser les classes de KineticJS (comme Rect) dactylographiée. Quelqu'un pourrait-il donner quelques conseils sur la façon d'archiver cela?

Créé 05/10/2012 à 11:18
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
6

Avez - vous regardé l'application par exemple tapuscrit à: http://typescript.codeplex.com/SourceControl/changeset/view/fe3bc0bfce1f#samples/imageboard/mongodb.ts

Le code à ce lien crée une définition pour la bibliothèque de MongoDB. Une différence entre cela et la réponse est que Sohnee Sohnee met en œuvre le constructeur contrairement au code suivant snip à partir du lien qui est une classe de souche. Je n'ai pas assez pour demander la réputation Sohnee dans la réponse acceptée pourquoi il a mis en œuvre le constructeur pour une classe ambiante?

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);
Créé 05/10/2012 à 14:50
source utilisateur

voix
5

Voici mon exemple de travail de la création de définitions ambiantes pour votre classe cinétique:

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

Notez que je l' ai utilisé declare var Kinetic: IKinetic;pour dire que tapuscrit cinétique est du type particulier.

Mise à jour - Exemple 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        
});
Créé 05/10/2012 à 11:24
source utilisateur

voix
0

Je sais que cela est maintenant vieux, mais vous pouvez trouver un fichier kinetic.d.ts complété ici: http://kineticjstypescript.codeplex.com/

Créé 31/01/2013 à 05:17
source utilisateur

voix
0

ITodoStorage est une interface vraiment, TodoStorage est mise en œuvre, mais je ne voudrais pas définir la classe, parce que cela me forcer à mettre en œuvre tous les membres. Au lieu de cela, je fais interface TodoStorage aussi bien. Enfin, je déclare var en tant que constructeur avec le nouveau mot-clé.

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

declare interface TodoStorage extends ITodoStorage {
}

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

Ensuite, je suis en mesure d'appeler le constructeur

var storageService : ITodoStorage = new TodoStorage();

Malheureusement, le var se cache le type de TodoStorage.

Créé 25/11/2012 à 00:24
source utilisateur

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