从TypeScript v2.2.1中调用JavaScript模块中的JavaScript函数

时间:2017-03-23 19:13:36

标签: javascript typescript

我以这种方式使用JavaScript模块

myJSModule.js

var myJSModule = function () {
   var _public_ = {};

   _public_.foo = function () {
   }

   return _public_;
}();

现在我需要在TypeScript

中的函数中调用它

myTypeScript.ts

namespace Custom {

    export function foo111() {
        myJSModule.foo(); // error: "Symbol myModule can't be properly resolved"
    }
}

myJSModule 中调用foo的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

最好的方法是使用ambient declaration。您可以在TypeScript文件中进行环境声明,但如果将它们放在单独的.d.ts文件中,则通常更容易管理。

在您的情况下,您可以添加名为myJSModule.d.ts的文件:

declare var myJSModule: {
    foo(): void;
}

这将告诉编译器myJSModule存在,并且具有所描述的类型。

答案 1 :(得分:1)

感谢@Jared Smith的评论

,这是一个可能的解决方案

我可以将窗口对象转换为任何,因此我不需要声明接口。

<强> myTypeScript.ts

namespace Custom {
    export function foo111() {
        (<any>window).myJSModule.foo();
    }
}

有关详情,请参阅文章http://ourcodeworld.com/articles/read/337/how-to-declare-a-new-property-on-the-window-object-with-typescript

答案 2 :(得分:0)

您可以声明模块

declare const myJSModule : any;
namespace Custom {
    export function foo111() {
        myJSModule.foo();
    }
}

如果您有JS模块的定义文件,您也可以将其添加到您的ts配置中。