Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从TypeScript v2.2.1在JavaScript模块内调用JavaScript函数_Javascript_Typescript - Fatal编程技术网

从TypeScript v2.2.1在JavaScript模块内调用JavaScript函数

从TypeScript v2.2.1在JavaScript模块内调用JavaScript函数,javascript,typescript,Javascript,Typescript,我用这种方式创建了一个JavaScript模块 myJSModule.js var myJSModule = function () { var _public_ = {}; _public_.foo = function () { } return _public_; }(); namespace Custom { export function foo111() { myJSModule.foo(); // error: "Symbol

我用这种方式创建了一个JavaScript模块

myJSModule.js

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

   _public_.foo = function () {
   }

   return _public_;
}();
namespace Custom {

    export function foo111() {
        myJSModule.foo(); // error: "Symbol myModule can't be properly resolved"
    }
}
namespace Custom {
    export function foo111() {
        (<any>window).myJSModule.foo();
    }
}
现在我需要在TypeScript中的函数中调用它

myTypeScript.ts

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

   _public_.foo = function () {
   }

   return _public_;
}();
namespace Custom {

    export function foo111() {
        myJSModule.foo(); // error: "Symbol myModule can't be properly resolved"
    }
}
namespace Custom {
    export function foo111() {
        (<any>window).myJSModule.foo();
    }
}

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

感谢@Jared Smith的评论,这里有一个可能的解决方案

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

myTypeScript.ts

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

   _public_.foo = function () {
   }

   return _public_;
}();
namespace Custom {

    export function foo111() {
        myJSModule.foo(); // error: "Symbol myModule can't be properly resolved"
    }
}
namespace Custom {
    export function foo111() {
        (<any>window).myJSModule.foo();
    }
}
命名空间自定义{
导出函数foo111(){

您只需声明模块即可

declare const myJSModule : any;
namespace Custom {
    export function foo111() {
        myJSModule.foo();
    }
}
如果您有JS模块的定义文件,您也可以将其添加到ts配置中。

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

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

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

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

了解如何在中创建和导入模块typescript@binariedMeOP可能无法控制该文件(例如,从CDN加载)。@vClobe try
window.myJSModule
@JaredSmith感谢您的快速回答。我仍然收到相同的错误“无法解析Symbol window.myJSModule"@vClobe您需要定义一个适当的界面来访问全局窗口对象谢谢@JaredSmith的帮助。我根据您建议的文章发布了一个答案,这样其他任何有相同问题的人都可以快速解决它。
window
是传统的强制转换方式,请选择
window作为任何
,好吗告诉我为什么windows as any是首选方式?主要是因为在JSX上下文中,当您有这样的内容时,解析器不可能知道您的意思:
var foo=bar
(是强制转换还是打开JSX元素?)