我在模块中声明了四十个左右的函数,但是还有一个方法可以将每个函数复制到全局命名空间(或者提供的任何目标对象)。
module JsHamcrest {
declare function assertThat(actual: any, matcher: Matcher): void;
// lots and lots of Matcher factory methods
declare function bool(): Matcher;
declare function func(): Matcher;
declare function number(): Matcher;
declare function object(): Matcher;
declare function string(): Matcher;
...
declare function copyMembers(target: any): void;
}
这允许开发人员通过模块名称
按原样使用JavaScript中的命名空间函数JsHamcrest.assertThat(5, JsHamcrest.number());
或将它们复制到全局命名空间中以提高可读性。
JsHamcrest.copyMembers(window);
assertThat('foo', string());
到目前为止,我提出的最短解决方案是将每个函数分配给一个全局变量:
var number = JsHamcrest.number;
但至少在PhpStorm中,JSDoc并未应用于副本,并且仍然容易出错(尽管不那么)。
tl; dr 如何在不复制粘贴它们的情况下声明这些顶级定义,并且仍然使用文档自动完成IDE?
答案 0 :(得分:2)
没有办法将成员“批量”复制到全局命名空间(谢天谢地?),但你可以使用import
代替var
,并且应该获取JSDoc信息,假设你的编辑器使用了TypeScript语言服务: