我目前正在尝试为 OpenLayers 构建一个 TypeScript 定义文件。
问题在于,在 OpenLayers 中,某些类可以同时转换为 TypeScript 中的模块和类。
例如Protocol
,模块中有类,模块OpenLayers
中有类。Response
OpenLayers.Protocol
我怎么能在 TypeScript 中建模呢?我可以创建Protocol
一个类并将该类定义Response
为导出的内部类吗?你将如何解决这个问题?
我目前正在尝试为 OpenLayers 构建一个 TypeScript 定义文件。
问题在于,在 OpenLayers 中,某些类可以同时转换为 TypeScript 中的模块和类。
例如Protocol
,模块中有类,模块OpenLayers
中有类。Response
OpenLayers.Protocol
我怎么能在 TypeScript 中建模呢?我可以创建Protocol
一个类并将该类定义Response
为导出的内部类吗?你将如何解决这个问题?
声明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();
编辑:
或者正如 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
.
这是我更新的答案,希望对您有所帮助 - 它应该让您开始定义 OpenType:
declare module OpenType {
export class Protocol {
constructor();
Request;
}
}
var x = new OpenType.Protocol();
var y = new x.Request();
var z = x.Request;