javascript - 打字稿:将局部变量名称分配给导入的嵌套命名空间
问题描述
我在一个单独的文件中声明了一个 JAVA 库,以构建其中使用的各种类和命名空间,因此当我从其他使用 JAVA 库的文件中引用它时,将会有相关的注释和类型。(这是一个 NativeScript 插件顺便说一句,这就是我混合 JAVA 和 JS 的原因)。
javalib.ts
export declare namespace org {
export namespace fizz {
export namespace buzz {
export namespace libA {
export class libAClassA { }
export class libAClassB { }
}
export namespace libB {
export class libBClassA { }
export class libBClassB { }
}
}
}
}
它看起来很狂野,我可能可以将其缩短为 justexport declare namespace org.fizz.buzz { ... }
但我现在将其排除在外。
在另一个将使用其中一些类(即,libAClassA 或 libBClassB)的文件中,我当然想导入这些命名空间以使类型和引用跟随。到目前为止,我已经能够让它像这样工作:
应用程序.ts
import * as pkg from './javalib';
let aliceClass = new pkg.org.fizz.buzz.libA.libAClassA();
let bobClass = new pkg.org.fizz.buzz.libA.libBClassB();
虽然这可行,但它并不理想,因为必须写出整个命名空间来引用此定义可能会变得非常麻烦,因为这会在开发时增加代码可见性。相反,我可以只做一条毯子declare var org: any
并完成它,但为了更好地开发这个项目以及其他人,我想利用它并设置它。
有什么方法可以将此命名空间引用转换为本地 var,类似于在 JAVA 中您可以做的事情import org.fizz.buzz;
并突然拥有对该命名空间内所有内容的引用和访问权限?
理想应用程序.ts
let libA = org.fizz.buzz.libA;
let libB = org.fizz.buzz.libB;
let aliceClass = new libA.libAClassA();
let bobClass = new libB.libBClassB();
解决方案
可以像在Ideal-app.ts中那样做,但要确保它与 Webpack 和 Snapshot 构建兼容,请在函数调用中初始化它们。像这样的东西,
let libA, libB;
function initializePackages() {
if (!libA) {
libA = org.fizz.buzz.libA;
libB = org.fizz.buzz.libB;
}
}
// Call it before accessing the variables
initializePackages();
let aliceClass = new libA.libAClassA();
let bobClass = new libB.libBClassB();
推荐阅读
- git - 如何检查 Git 中的凭据管理器是否为给定域存储了密码?
- eclipse - Eclipse TM 终端:ESP32 串口终端
- html - 如何将选择框设置为如下所示:https://postimg.cc/image/tm5jzc6g7/
- marklogic - Marklogic 如何保存多个工作区
- github - 将带有 123-reg 的域名链接到 Github Pages
- excel - 如果文件存在,则在 VBA for Excel 中为特定范围创建 CSV,并提示
- javascript - 模块中的 JavaScript 间隔函数
- reactjs - 在反应中将数据从父组件传递到子组件
- mysql - 通过计数各种类型进行分组
- java - 全新安装后的eclipse IDE无法启动但抱怨