Wie erstelle ich Ambient Klassendeklarationen in Typoskript

stimmen
7

Ich versuche, eine .d.ts-Datei für die KineticJS Bibliothek zu erstellen. Bisher habe ich die folgende Interface-Deklaration „kinect.d.ts“ erstellt. (Ich kann das ein bisschen für Stackoverflow abgeschnitten, aber ich hoffe, Sie bekommen die Idee)

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

Ich hoffte, dass dies wäre genug, um ein Kinetic.Rect Objekt in meiner app.ts-Datei zu erstellen

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

Aber es scheint, ich habe einige zusätzliche Arbeit zu tun, um die KineticJS Klassen zu verwenden (wie Rect) in Typoskript. Könnte jemand einige Hinweise geben, wie diese zu archivieren?

Veröffentlicht am 05/10/2012 um 11:18
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
6

Haben Sie im Typoskript Beispiel app sehen: http://typescript.codeplex.com/SourceControl/changeset/view/fe3bc0bfce1f#samples/imageboard/mongodb.ts

Der Code unter diesem Link erstellt eine Definition für die mongodb Bibliothek. Ein Unterschied zwischen diesem und der Sohnee Antwort ist, dass Sohnee implementiert den Konstruktor im Gegensatz zu dem folgenden Code Schnipsel von der Verbindung, die eine Stub-Klasse ist. Ich habe nicht genug Ruf Sohnee in der akzeptierten Antwort zu fragen, warum er den Konstruktor für eine Umgebungsklasse implementiert?

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);
Beantwortet am 05/10/2012 um 14:50
quelle vom benutzer

stimmen
5

Hier ist mein Arbeitsbeispiel Umgebungsdefinitionen für Ihre Kinetic-Klasse erstellen:

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

Beachten Sie, dass ich verwendet habe , declare var Kinetic: IKinetic;Typoskript zu sagen , dass Kinetic von der speziellen Art ist.

Update - Beispiel 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        
});
Beantwortet am 05/10/2012 um 11:24
quelle vom benutzer

stimmen
0

Ich weiß , das jetzt alt ist, aber Sie können eine abgeschlossene kinetic.d.ts Datei finden Sie hier: http://kineticjstypescript.codeplex.com/

Beantwortet am 31/01/2013 um 05:17
quelle vom benutzer

stimmen
0

ITodoStorage ist wirklich eine Schnittstelle, TodoStorage Implementierung ist, aber ich würde nicht Klasse definieren möchte, denn das mich zwingen würde, alle Mitglieder zu implementieren. Stattdessen mache ich TodoStorage Schnittstelle als auch. Schließlich erkläre ich var als Konstruktor mit neuem Schlüsselwort.

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

declare interface TodoStorage extends ITodoStorage {
}

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

Dann bin ich in der Lage den Konstruktor aufrufen

var storageService : ITodoStorage = new TodoStorage();

Leider ist die var Ausblenden der TodoStorage Typ.

Beantwortet am 25/11/2012 um 00:24
quelle vom benutzer

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