Jak mogę utworzyć Deklaracje Klasa otoczenia w maszynopisie

głosy
7

Próbuję utworzyć plik .d.ts dla biblioteki KineticJS. Do tej pory stworzył następującą deklarację Interface „kinect.d.ts.” (I przycięte kod trochę do stackoverflow, ale mam nadzieję, że masz pomysł)

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

Mam nadzieję, że to byłoby na tyle, aby móc utworzyć obiekt Kinetic.Rect w moim pliku app.ts

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

Ale wydaje się, muszę zrobić jakąś dodatkową pracę, aby skorzystać z klas KineticJS (jak Rect) w maszynopisie. Może ktoś podać kilka wskazówek, w jaki sposób archiwizować to?

Utwórz 05/10/2012 o 11:18
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
6

Pan spojrzał na przykładzie aplikacji maszynopis w: http://typescript.codeplex.com/SourceControl/changeset/view/fe3bc0bfce1f#samples/imageboard/mongodb.ts

Kod pod tym linkiem tworzy definicję dla biblioteki MongoDB. Jedna z różnic między tym i odpowiedzi Sohnee że Sohnee implementuje konstruktor w przeciwieństwie do kodu następującym Snipie z linku, który jest klasą en. Nie mam wystarczającej reputacji zadawania Sohnee w przyjętym odpowiedź dlaczego on realizowany konstruktora dla klasy otoczenia?

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);
Odpowiedział 05/10/2012 o 14:50
źródło użytkownik

głosy
5

Oto mój przykład praca tworzenia definicji otoczenia dla Kinetic klasy:

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

Zauważ, że użyłem declare var Kinetic: IKinetic;, aby powiedzieć, że maszynopis Kinetic jest od konkretnego typu.

Aktualizacja - Przykład 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        
});
Odpowiedział 05/10/2012 o 11:24
źródło użytkownik

głosy
0

Zdaję sobie sprawę, to jest teraz stary, ale można znaleźć wypełniony plik kinetic.d.ts tutaj: http://kineticjstypescript.codeplex.com/

Odpowiedział 31/01/2013 o 05:17
źródło użytkownik

głosy
0

ITodoStorage jest naprawdę interfejs, TodoStorage jest realizacja, ale nie chciałbym, aby określić klasę, bo to zmusiłoby mnie do wdrożenia wszystkich członków. Zamiast tego uczynić interfejs TodoStorage również. Wreszcie oświadczam var jako konstruktor nowego hasła.

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

declare interface TodoStorage extends ITodoStorage {
}

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

Wtedy jestem w stanie wywołać konstruktor

var storageService : ITodoStorage = new TodoStorage();

Niestety var ukrywa typ TodoStorage.

Odpowiedział 25/11/2012 o 00:24
źródło użytkownik

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