繁体   English   中英

将类定义为 Typescript 中的全局变量,以便稍后在 js 中使用而无需将其导入

[英]Define class as global variable in Typescript to use without import it in js later

我确定那里已经有了答案,但我连续搜索了一个小时,但无法让它发挥作用。

我正在尝试重构一些旧代码,其中只使用了 vars 和 global vars。 我想我开始将两个构造函数(如果你可以这样称呼它们)作为新类来实现,但仍然在 js 中将它们用作全局变量(没有任何导入语句)。 对于第一个运行良好的示例,我什至不必导出类,而是通过 index.html 文件将其包含在内,并像以前一样在 js 代码中使用它。 但是在第二堂课上我遇到了一些问题,我不得不从另一个 js 文件中导入代码,所以我在项目中包含了 requireJs 并通过import qSVG = require('../js/qSVG.js');导入了它import qSVG = require('../js/qSVG.js'); . 通过使用 requireJs 并在我的 tsconfig 中切换到"module": "AMD"我用它制作了一个模块,因此无法在其他任何地方使用它。 我不能一次重写整个项目,所以我需要像以前一样调用它。

我怎样才能做到这一点?

如何将其导出到全局命名空间,以便每个文件都知道它而无需任何导入?

tsconfig.json(只是由 webstorm 生成的扩展默认值)

{
  "compilerOptions": {
    "module": "AMD",
    "lib": ["es6", "dom", "es2017"],
    "target": "es5",
    "sourceMap": true
  },
  "exclude": [
    "node_modules"
  ]
}

二维对象.ts

import $ = require('../../libraries/jquery.min.js');
import qSVG = require('../js/qSVG.js');

export class TwoDimensionalObject {
    /* some properties */

    constructor(/*params*/) {
        // initialisation code
    }

    public update(): boolean {
       // some code
    }
}

编辑器.js

function _MOUSEMOVE(event) {
    /* some code */
    binder = new TwoDimensionalObject(/*params*/)
    /* some code */
}

我已经尝试了一些东西

  • 只需添加到窗口对象,如: (window as any).TwoDimensionalObject = TwoDimensionalObject

  • 扩展窗口对象,如:

declare global {
    interface Window { TwoDimensionalObject: any; }
}

window.TwoDimensionalObject = window.TwoDimensionalObject;
  • 声明为 const ,如:

declare const TwoDimensionalObject = TwoDimensionalObject;

您可以在 window 对象中设置它:

二维对象.ts

...
export class TwoDimensionalObject {
   ...
}
...

window['TwoDimensionalObject'] = TwoDimensionalObject;
alert('TwoDimensionalObject class is now global!!!!!!!!!!!!!!');

确保它将以某种方式执行,例如在某个入口文件中:

main.ts (入口代码)

import './two-dimensional-object';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM