4

我目前正在尝试为 OpenLayers 构建一个 TypeScript 定义文件。

问题在于,在 OpenLayers 中,某些类可以同时转换为 TypeScript 中的模块和类。

例如Protocol,模块中有类,模块OpenLayers中有类。ResponseOpenLayers.Protocol

我怎么能在 TypeScript 中建模呢?我可以创建Protocol一个类并将该类定义Response为导出的内部类吗?你将如何解决这个问题?

4

2 回答 2

1

声明Response为具有构造函数类型的static字段,返回定义类的一个:ProtocolinterfaceResponse

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

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

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

编辑:

或者正如 Anders 在此讨论列表问题中指出的那样,您可以通过这种方式为内部类创建多个构造函数:

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.

于 2012-10-14T02:13:12.517 回答
0

这是我更新的答案,希望对您有所帮助 - 它应该让您开始定义 OpenType:

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

var x = new OpenType.Protocol();
var y = new  x.Request();
var z = x.Request;
于 2012-10-09T13:37:33.377 回答