我在我提供dds
对象的TypeScript源代码中使用Vortex Web JavaScript库。这是一个片段:
var runtime = new dds.runtime.Runtime();
runtime.connect("ws://localhost:9000", "user:pass");
var chatTopic = new dds.Topic(0, 'ChatMessage');
runtime.registerTopic(chatTopic);
对于这个库,我想写一个定义文件。
这是我目前的尝试:
declare module VortexWebClient {
interface TopicQos {
new (): TopicQos;
}
interface Topic {
new (domainID: number, topicName: string): Topic;
new (domainID: number, topicName: string, tqos: TopicQos): Topic;
new (domainID: number, topicName: string, tqos: TopicQos, topicType: string): Topic;
new (domainID: number, topicName: string, tqos: TopicQos, topicType: string, typeName: string): Topic;
}
interface Runtime {
new (): Runtime;
connect(server: string, authToken: string);
disconnect();
registerTopic(topic: Topic);
}
interface runtime {
Runtime: Runtime;
}
export interface DDS {
runtime : runtime;
Topic : Topic;
VERSION: string;
}
}
declare var dds: VortexWebClient.DDS;
这样可行,但在我看来应该有更好的方法来使用export
关键字。特别要列出底部DDS
界面的所有成员(还有很多要编写的内容)应该避免。
我尝试了许多不同的方法,其中一种是以下方式。它应该避免显式创建dds接口,它只是一个包装器,所以说:
declare module DDS {
export interface TopicQos {
new (): TopicQos;
}
export interface Topic {
new (domainID: number, topicName: string): Topic;
new (domainID: number, topicName: string, tqos: TopicQos): Topic;
new (domainID: number, topicName: string, tqos: TopicQos, topicType: string): Topic;
new (domainID: number, topicName: string, tqos: TopicQos, topicType: string, typeName: string): Topic;
}
interface Runtime {
new (): Runtime;
connect(server: string, authToken: string);
disconnect();
registerTopic(topic: Topic);
}
export interface runtime {
Runtime: Runtime;
}
export var VERSION: string;
}
//Here IntelliJ complaints: "Cannot find name: DDS"
declare var dds: DDS;
创建包含多个子模块的定义文件的正确方法是什么?
答案 0 :(得分:1)
此行中的错误:
declare var dds: DDS;
因为DDS
不是类型,所以它是一个模块。但是你正试图将它作为一种类型使用。
您可以改为将DDS
重命名为dds
,然后它实际上是一个变量,用于保存具有您已声明的内部结构的对象。
答案 1 :(得分:1)
从示例的开头开始,./manage.py makemigrations autotester
./manage.py migrate autotester
是一个全局对象。
dds
它有declare var dds: any;
属性。
runtime
declare var dds: { runtime : any};
有一个名为runtime
的属性,它是一个带有不带参数的构造函数的类。
Runtime
declare var dds: {
runtime : {
Runtime: typeof Runtime
}
};
declare class Runtime {
constructor();
}
类有一个名为Runtime
的方法,它接受两个字符串并返回void。
connect
这填补了您的初始要求。现在,通过将所有类型(全局declare var dds: {
runtime : {
Runtime: typeof Runtime
}
};
declare class Runtime {
constructor();
connect(server: string, authToken: string): void;
}
除外)放在dds
模块中,让我们整理一下。
VortexWeb
这是你的首发定义。希望有所帮助!