Javascript中的全局命名空间:迁移到TypeScript

Javascript中的全局命名空间:迁移到TypeScript,javascript,typescript,Javascript,Typescript,我有多个文件,如: library0.js library1.js 图书馆 每个都填充全局对象“MY_global”的一部分,如下例所示: library0.js library1.js 目前在我的index.html文件中,我在脚本中添加了所有这些文件。因此,我的所有其他js文件都可以简单调用: MY_GLOBAL.extractErrMsg 或MY_GLOBAL上的任何其他函数/对象 我正在迁移到TypeScript,我不知道如何处理这个全局名称空间。每当我引用全局对象MY_glob

我有多个文件,如:

  • library0.js
  • library1.js
  • 图书馆
每个都填充全局对象“MY_global”的一部分,如下例所示:

library0.js library1.js 目前在我的index.html文件中,我在脚本中添加了所有这些文件。因此,我的所有其他js文件都可以简单调用:

MY_GLOBAL.extractErrMsg
或MY_GLOBAL上的任何其他函数/对象

我正在迁移到TypeScript,我不知道如何处理这个全局名称空间。每当我引用全局对象MY_global时,都会出现错误TS2304:找不到名称“MY_global”。 我应该把这些都移植到模块上吗


谢谢大家!

这将是一项工作,但我不会像这样使用全局变量,而是更改您的代码以导出值:

// library1.ts

export const TIMEOUT = 120000;
export const extractErrMsg = reqResponse => console.log(reqResponse);
然后在使用它的代码中,可以将其作为模块导入:

import { TIMEOUT, extractErrMsg } from './library1';
如果需要,还可以从“/libary1”以MY_GLOBAL的形式执行类似于导入的操作,但一次只能执行一次导入


如果您不想经历这一过程,或者您还没有能力完成这一过程,那么您仍然可以通过
声明
ing
MY_GLOBAL
来完成您需要的操作:

// order here actually doesn't matter; you may want to do the import first
declare const MY_GLOBAL: any;
import './library1';
然后,您可以使用
MY\u GLOBAL
中想要的任何值。如果需要,还可以定义比
any
更具体的类型,其中包括已知值

如果需要,您还可以从“/libary1”以MY_GLOBAL的形式执行导入*之类的操作,但一次只能对一个导入执行此操作

对此,您可以执行以下操作:

// my-global/file1.ts
export const TIMEOUT = 123

// my-global/file2.ts
export const foo = 123

// my-global/index.ts
export * from './file1'
export * from './file2'

// consume.ts
import * as MY_GLOBAL from './my-global'

您可能想考虑TypScript <强>命名空间< /强>,这取决于您的迁移需求。TypeScript会将名称空间编译成模块式javascript,其中MY_GLOBAL仍然在全局范围内定义,但会被注入函数中,以便可以扩展。因此,最初可能不需要转换所有js

lib0.ts

namespace MY_GLOBAL {
    export const TIMEOUT = 120000;
    export const extractErrMsg = reqResponse => console.log(reqResponse);
}
namespace MY_GLOBAL {
  export const STRING = 'STRING';
  export const exposed = () => console.log("This is exposed");
}
并发症后

var MY_GLOBAL;
(function (MY_GLOBAL) {
  MY_GLOBAL.TIMEOUT = 120000;
  MY_GLOBAL.extractErrMsg = function (reqResponse) { return 
  console.log(reqResponse); };
})(MY_GLOBAL || (MY_GLOBAL = {}));
var MY_GLOBAL;
(function (MY_GLOBAL) {
  MY_GLOBAL.STRING = 'STRING';
  MY_GLOBAL.exposed = function () { return console.log("This is exposed"); };
})(MY_GLOBAL || (MY_GLOBAL = {}));
lib1.ts

namespace MY_GLOBAL {
    export const TIMEOUT = 120000;
    export const extractErrMsg = reqResponse => console.log(reqResponse);
}
namespace MY_GLOBAL {
  export const STRING = 'STRING';
  export const exposed = () => console.log("This is exposed");
}
并发症后

var MY_GLOBAL;
(function (MY_GLOBAL) {
  MY_GLOBAL.TIMEOUT = 120000;
  MY_GLOBAL.extractErrMsg = function (reqResponse) { return 
  console.log(reqResponse); };
})(MY_GLOBAL || (MY_GLOBAL = {}));
var MY_GLOBAL;
(function (MY_GLOBAL) {
  MY_GLOBAL.STRING = 'STRING';
  MY_GLOBAL.exposed = function () { return console.log("This is exposed"); };
})(MY_GLOBAL || (MY_GLOBAL = {}));

谢谢你的建议。然后我将如何在其他文件中使用我的_GLOBAL?