这是什么样的javascript语法:"var XX=(函数(){..})()"以及如何将其与Typ

What kind of javascript syntax is this: "var XX = (function (){...})();" and how can I use it with TypeScript

本文关键字:quot Typ javascript 什么样 语法 XX var 函数      更新时间:2023-09-26

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

但现在,在打字项目中,它也应该起作用。有人能解决这个问题吗?

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

首先是IIFE

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

这被称为IIFE

var XX = (function XXClosure() {
      function XX(options) {
        ...
      },
      XX.prototype = {
        myMethod1: function(){...},
        myMethod2: function(){...},
        ...
      }
      return XX;
    })();

如果您希望从JavaScriptTypeScript注入某些内容,则必须使用扩展名为.d.ts的文件中的declare语句。

请参阅此处.d.ts

此外,由于toskv

,您还需要使用declare var XX:any->

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

我在"构造函数"中使用了一个全局对象变量,该变量来自当时未加载的其他js模块。将"script src=‘…’"放在主html页面的头块中,而不是放在html模板中,解决了我的问题。