Как создать Объявления Ambient класса в машинописном

голоса
7

Я пытаюсь создать .d.ts файл для библиотеки KineticJS. До сих пор я создал следующий интерфейс декларацию «kinect.d.ts». (Я обрезанный код немного для StackOverflow, но я надеюсь, что вы получите идею)

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

Я надеялся, что это будет достаточно, чтобы быть в состоянии создать объект Kinetic.Rect в моем файле app.ts

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

Но, похоже, что я должен сделать некоторую дополнительную работу, чтобы использовать классы KineticJS (например, Rect) в машинописи. Может кто-нибудь дать некоторые советы о том, как архивировать это?

Задан 05/10/2012 в 11:18
источник пользователем
На других языках...                            


4 ответов

голоса
6

Вы смотрели на пример приложения Машинопись по адресу: http://typescript.codeplex.com/SourceControl/changeset/view/fe3bc0bfce1f#samples/imageboard/mongodb.ts

Код по этой ссылке создает определение для библиотеки MongoDB. Одно различие между этим и ответом Sohnee что Sohnee реализует конструктор, в отличии от следующего кода надреза от соединения, который является классом заглушки. Я не хватает репутации спросить Sohnee в общепринятом ответ, почему он реализован конструктор для класса окружающей среды?

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);
Ответил 05/10/2012 в 14:50
источник пользователем

голоса
5

Вот мой рабочий пример создания определений окружающей среды для 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        
});

Обратите внимание , что я использовал , declare var Kinetic: IKinetic;чтобы сказать , что машинопись Kinetic имеет определенного типа.

Обновление - Пример 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        
});
Ответил 05/10/2012 в 11:24
источник пользователем

голоса
0

Я понимаю , что сейчас это старое, но вы можете найти заполненный kinetic.d.ts файл здесь: http://kineticjstypescript.codeplex.com/

Ответил 31/01/2013 в 05:17
источник пользователем

голоса
0

ITodoStorage действительно интерфейс, TodoStorage является реализация, но я не хотел бы определить класс, потому что заставит меня выполнять все члены. Вместо этого я сделать интерфейс TodoStorage, а также. Наконец-то я объявляю вар в качестве конструктора с новым ключевым словом.

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

declare interface TodoStorage extends ITodoStorage {
}

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

Тогда я в состоянии вызвать конструктор

var storageService : ITodoStorage = new TodoStorage();

К сожалению, вар скрывается тип TodoStorage.

Ответил 25/11/2012 в 00:24
источник пользователем

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