这是什么样的javascript语法;var XX=(函数(){…})()&引用;我如何将其与TypeScript一起使用

这是什么样的javascript语法;var XX=(函数(){…})()&引用;我如何将其与TypeScript一起使用,javascript,typescript,Javascript,Typescript,我在PDFJS查看器示例中发现: var XX = (function XXClosure() { function XX(options) { ... }, XX.prototype = { myMethod1: function(){...}, myMethod2: function(){...}, ... } return XX; })(); 我创建了一个这样的构造,完全不知道它是什么,并以这种方式在javascript项目中使用它:

我在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复制了这个,它成功了,我从来没有问过为什么

但是现在,在typescript项目中,它应该也能工作。有人能解决这个问题吗?

这叫做like

如果您想将
JavaScript
中的内容注入
TypeScript
中,则必须使用
在扩展名为
.d.ts的文件中声明
语句

对此,请参见此处

而且您还需要使用
declare var XX:any
->,这就是所谓的like

如果您想将
JavaScript
中的内容注入
TypeScript
中,则必须使用
在扩展名为
.d.ts的文件中声明
语句

对此,请参见此处

而且您还需要使用
declare var XX:any
->感谢首先是

对于TypeScript,您可以使用
()

首先是


对于TypeScript,您可以使用
class
()

它们基本上是通过使用自调用函数来创建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{...}

他们基本上是通过使用自调用函数来创建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{...}

谢谢大家的帮助。我问题的第一部分已经完全回答了。第二部分,我侥幸解决了。我删除了“use strict”行,得到了一条有意义的错误消息:“使用未定义的变量”


我在“constructor”中使用了一个全局对象变量,该变量来自另一个js模块,该模块当时没有加载。将“script src='…'”放在主html页面的头块中而不是html模板中,解决了我的问题。

谢谢大家的帮助。我问题的第一部分已经完全回答了。第二部分,我侥幸解决了。我删除了“use strict”行,得到了一条有意义的错误消息:“使用未定义的变量”


我在“constructor”中使用了一个全局对象变量,该变量来自另一个js模块,该模块当时没有加载。将“script src='…'”放在主html页面的头块中而不是html模板中,解决了我的问题。

declare在任何地方都有效。他只需要说它是一个变量,所以声明var XX:any@好的。我知道当你想第一次运行js代码时,你需要把它放在
.d.ts
文件中谢谢你的回答。现在我知道是什么了。下次我将尝试.d.ts文件中的条目。declare在任何地方都有效。他只需要说它是一个变量,所以声明var XX:any@好的。我知道当你想第一次运行js代码时,你需要把它放在
.d.ts
文件中谢谢你的回答。现在我知道是什么了。下次我将尝试.d.ts文件中的条目。可能的正确副本,但它只回答我问题的第一部分。可能的正确副本,但它只回答我问题的第一部分。谢谢您的回答。现在我知道是什么了。类构造是个好主意,但我必须澄清我是否可以使用ES6特性。Typescript允许类。然后,您的类将被转换成与原始代码非常相似的东西。类:,模块:代码是不同项目的通用代码。它应该适用于ts-和js-项目。谢谢你的回答。现在我知道是什么了。类构造是个好主意,但我必须澄清我是否可以使用ES6特性。Typescript允许类。然后,您的类将被转换成与原始代码非常相似的东西。类:,模块:代码是不同项目的通用代码。它应该适用于ts-和js-项目。谢谢你的回答。现在我知道是什么了。班级结构是个好主意,但我必须澄清我是否可以使用ES6功能。谢谢你的回答。现在我知道是什么了。类构造是一个好主意,但我必须澄清我是否可以使用ES6特性。