Машинопись модуль и класс одновременно?

голоса
4

В настоящее время я пытаюсь создать файл определения Машинописи для OpenLayers.

Проблема заключается в том, что в OpenLayers есть определенные классы, которые будут переводить как для модуля и класса в машинописи.

Например есть Protocolкласс в модуле OpenLayersи есть класс Responseв модуле OpenLayers.Protocol.

Как я могу смоделировать , что в машинописном? Могу ли я сделать Protocolкласс и определить Responseкласс как внутренний класс , который экспортируется? Как бы вы идти о решении этой проблемы?

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


2 ответов

голоса
1

Объявить Responseкак staticполе Protocolс типом конструктора, возвращая , interfaceкоторый определяет Responseкласс:

declare module OpenLayers {
    export interface IProtocolResponse {
        foo(): void;
    }

    export class Protocol {
        static Response: new () => IProtocolResponse;
    }
}

var response = new OpenLayers.Protocol.Response();
response.foo();

Редактировать:

Или , как Андерс отмечает в этом списке обсуждения вопроса , вы можете иметь несколько конструкторов для внутреннего класса таким образом:

declare module OpenLayers {
    export interface IProtocolResponse {
        foo(): void;
    }

    export class Protocol {
        static Response: {
            new (): IProtocolResponse;
            new (string): IProtocolResponse;
        };
    }
}

var response = new OpenLayers.Protocol.Response('bar');
response.foo();

Основным недостатком обоих подходов является то , что вы не можете получить класс из OpenLayers.Protocol.Response.

Ответил 14/10/2012 в 03:13
источник пользователем

голоса
0

Вот мой обновленный ответ, который я надеюсь, что помогает - это поможет вам начать с определения OpenType:

declare module OpenType {
   export class Protocol {
       constructor();
       Request;
   }
}

var x = new OpenType.Protocol();
var y = new  x.Request();
var z = x.Request;
Ответил 09/10/2012 в 14:37
источник пользователем

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