我在PDFJS查看器示例中找到了这个:
var XX = (function XXClosure() {
function XX(options) {
...
},
XX.prototype = {
myMethod1: function(){...},
myMethod2: function(){...},
...
}
return XX;
})();
我创建了这样的构造,不知道它是什么,并以这种方式在javascript项目中使用它:
var myXX = new XX(myOptions);
myXX.Method1();
这非常有效。
现在我尝试在TypeScript项目中使用此构造:
declare XX:any
import myJavascript.js;
var myXX = new XX(myOptions);
我在运行时得到错误:“XX不是构造函数”
不要问我为什么以这种方式制作,可能还有其他人,我从PDFJS viewer.js复制了它,它起作用了,我从来没有问过为什么。
但是现在,在打字稿项目中,它也应该有用。有人为此解决了吗?
答案 0 :(得分:1)
这称为IIFE
var XX = (function XXClosure() {
function XX(options) {
...
},
XX.prototype = {
myMethod1: function(){...},
myMethod2: function(){...},
...
}
return XX;
})();
如果您希望将某些内容从JavaScript
注入TypeScript
,则必须使用
declare
扩展名为.d.ts
的文件中的declare var XX:any
声明。
为此,请参阅此处.d.ts
您还需要使用int getHeight(Element e) {
int max_height = 0;
for (Element child : e.children) {
max_height = max(max_height, getHeight(child));
}
return max_height + 1;
}
- >感谢toskv
答案 1 :(得分:1)
首先是IIFE
对于TypeScript,您可以使用class
(documentation)
答案 2 :(得分:1)
他们基本上通过使用自调用函数创建ES6类:,即(function(){})()。这将被分配给变量XX。
Typescript中的类似构造将是
class XX {
constructor(options){
//do stuff with options
}
myMethod1(){}
myMethod2(){}
...//additional methods
}
您可以像使用
的JS对象一样实例化它var xx = new XX(options);
如果你导出这个类,它应该没有任何问题导入。
export class XX{...}
答案 3 :(得分:0)
感谢大家的帮助。我的问题的第一部分是完整的答案。第二部分,我被侥幸解决了。我删除了'use strict'行,我得到了一条有意义的错误信息:'使用未定义的变量'。
我在'constructor'中使用了一个全局对象变量,该变量来自另一个此时未加载的js模块。将“script src ='...'”放在主html页面的head块中,而不是放在html模板中,解决了我的问题。