gpt4 book ai didi

javascript - Javascript 中的全局命名空间 : Migrating to TypeScript

转载 作者:行者123 更新时间:2023-11-30 20:51:15 25 4
gpt4 key购买 nike

我有多个文件,例如:

  • library0.js
  • library1.js
  • ...
  • libraryn.js

每个填充一个全局对象“MY_GLOBAL”的一部分,就像这个例子:

library0.js

// check that the MY_GLOBAL namespace exists
if (typeof(MY_GLOBAL) === 'undefined') {
var MY_GLOBAL = {};
}

MY_GLOBAL.TIMEOUT = 120000; // 2 minutes

MY_GLOBAL.extractErrMsg = function(reqResponse) {
console.log(reqResponse);
};

library1.js

// check that the MY_GLOBAL namespace exists
if (typeof(MY_GLOBAL) === 'undefined') {
var MY_GLOBAL = {};
}

MY_GLOBAL.STRING = 'STRING';

MY_GLOBAL.exposed = function() {
console.log("This is exposed);
};

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

MY_GLOBAL.extractErrMsg

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

我正在迁移到 TypeScript,但我不确定如何处理这个全局命名空间。在我引用全局对象 MY_GLOBAL 的任何地方,我都会收到错误 TS2304:找不到名称“MY_GLOBAL”。我应该将所有这些移植到模块吗?

谢谢!

最佳答案

您可能需要考虑 TypeScript 命名空间,具体取决于您的迁移需求。 TypeScript 会将命名空间编译成模块样式的 javascript,其中 MY_GLOBAL 仍然在全局范围内定义,但注入(inject)到函数中以便可以扩展。因此,您最初可能不需要转换所有 js。

https://www.typescriptlang.org/docs/handbook/namespaces.html

lib0.ts

namespace MY_GLOBAL {
export const TIMEOUT = 120000;
export const extractErrMsg = reqResponse => console.log(reqResponse);
}

并发症发生后

var MY_GLOBAL;
(function (MY_GLOBAL) {
MY_GLOBAL.TIMEOUT = 120000;
MY_GLOBAL.extractErrMsg = function (reqResponse) { return
console.log(reqResponse); };
})(MY_GLOBAL || (MY_GLOBAL = {}));

lib1.ts

namespace MY_GLOBAL {
export const STRING = 'STRING';
export const exposed = () => console.log("This is exposed");
}

并发症发生后

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

关于javascript - Javascript 中的全局命名空间 : Migrating to TypeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com