将模块函数声明复制到全局命名空间

时间:2014-11-03 19:36:41

标签: typescript definitelytyped

我在模块中声明了四十个左右的函数,但是还有一个方法可以将每个函数复制到全局命名空间(或者提供的任何目标对象)。

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?

1 个答案:

答案 0 :(得分:2)

没有办法将成员“批量”复制到全局命名空间(谢天谢地?),但你可以使用import代替var,并且应该获取JSDoc信息,假设你的编辑器使用了TypeScript语言服务:

enter image description here