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