Jak mohu vytvořit prohlášení Ambient Class na psacím stroji

hlasů
7

Snažím se vytvořit .d.ts soubor pro knihovnu KineticJS. Zatím jsem vytvořil toto prohlášení rozhraní „kinect.d.ts.“ (Oříznutí jsem kód trochu pro StackOverflow ale doufám, že máte představu)

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

Doufal jsem, že by to mělo stačit, aby bylo možné vytvořit objekt Kinetic.Rect v mém souboru app.ts

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

Ale zdá se, budu muset udělat nějakou práci navíc použít tříd KineticJS (jako RECT) na stroji. Mohl by někdo dát nějaké odkazy na to, jak archivovat to?

Položena 05/10/2012 v 11:18
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
6

Už jste se podíval na příklad aplikace strojopisu na adrese: http://typescript.codeplex.com/SourceControl/changeset/view/fe3bc0bfce1f#samples/imageboard/mongodb.ts

Kód na tomto odkazu vytvoří definice pro knihovnu MongoDB. Jeden rozdíl mezi tímto a odpověď Sohnee že Sohnee implementuje konstruktor na rozdíl od následujícího SNIP kódu z odkazu, který je třída útržek. Nemám dostatek pověst klást Sohnee v přijatém odpovědi, proč se realizoval konstruktor okolní třídě?

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);
Odpovězeno 05/10/2012 v 14:50
zdroj uživatelem

hlasů
5

Tady je můj pracovní příklad vytvoření definice okolní pro Kinetic třída:

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

Všimněte si, že jsem použil declare var Kinetic: IKinetic;říci strojopisu, že Kinetic je daný typ.

Aktualizace - Příklad 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        
});
Odpovězeno 05/10/2012 v 11:24
zdroj uživatelem

hlasů
0

Uvědomil jsem si, tohle je teď starý, ale můžete najít vyplněný soubor kinetic.d.ts zde: http://kineticjstypescript.codeplex.com/

Odpovězeno 31/01/2013 v 05:17
zdroj uživatelem

hlasů
0

ITodoStorage skutečně rozhraní, TodoStorage je realizace, ale já bych chtěl definovat třídu, protože to by mě přinutit k implementaci všech členů. Místo toho, aby TodoStorage rozhraní stejně. Nakonec Prohlašuji var jako konstruktér s novým klíčové slovo.

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

declare interface TodoStorage extends ITodoStorage {
}

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

Pak jsem schopen volat konstruktor

var storageService : ITodoStorage = new TodoStorage();

Bohužel var skrývá typ TodoStorage.

Odpovězeno 25/11/2012 v 00:24
zdroj uživatelem

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