Cum pot crea declarații Ambient Class dactilografiat

voturi
7

Am încercat să creeze un fișier .d.ts pentru biblioteca KineticJS. Până în prezent, am creat următoarea declarație de interfață „kinect.d.ts“. (Am trunchiază codul un pic pentru StackOverflow, dar sper că ai prins ideea)

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

Am sperat acest lucru ar fi suficient pentru a fi capabil de a crea un obiect Kinetic.Rect în fișierul meu app.ts

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

Dar se pare că trebuie să fac ceva de lucru suplimentar pentru a utiliza clasele KineticJS (cum ar fi Dreptunghi) dactilografiat. Ar putea cineva da câteva indicii cu privire la modul de a arhiva acest lucru?

Întrebat 05/10/2012 la 11:18
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
6

V - ați uitat la exemplul app typescript la: http://typescript.codeplex.com/SourceControl/changeset/view/fe3bc0bfce1f#samples/imageboard/mongodb.ts

Codul la acest link creează o definiție pentru biblioteca MongoDB. O diferență între acest lucru și răspunsul Sohnee este că Sohnee implementează constructorul, în contrast cu următorul cod de vârf tăiat link-ul, care este o clasa ciot. Nu am suficient de reputație pentru a cere Sohnee în răspunsul acceptat de ce a pus în aplicare constructor pentru o clasă ambiantă?

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);
Publicat 05/10/2012 la 14:50
sursa de către utilizator

voturi
5

Iată exemplul meu de lucru de a crea definiții ambientale pentru clasa Kinetic:

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

Rețineți că am folosit declare var Kinetic: IKinetic;pentru a spune că typescript Kinetic este de tip particular.

Update - Exemplul 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        
});
Publicat 05/10/2012 la 11:24
sursa de către utilizator

voturi
0

Îmi dau seama că acest lucru este acum vechi, dar puteți găsi un fișier kinetic.d.ts completat aici: http://kineticjstypescript.codeplex.com/

Publicat 31/01/2013 la 05:17
sursa de către utilizator

voturi
0

ITodoStorage este într-adevăr interfață, TodoStorage este punerea în aplicare, dar nu aș vrea să se definească clasa, pentru că m-ar obliga să pună în aplicare toți membrii. În schimb eu fac interfata TodoStorage la fel de bine. În cele din urmă, declar ca var constructor cu cuvânt cheie nou.

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

declare interface TodoStorage extends ITodoStorage {
}

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

Apoi, sunt în stare să sun constructor

var storageService : ITodoStorage = new TodoStorage();

Din păcate, var se ascunde tipul TodoStorage.

Publicat 25/11/2012 la 00:24
sursa de către utilizator

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