为 src 库文件分配命名空间

Sof*_*mur 5 javascript namespaces type-declaration typescript reactjs

我有一个用 ReactJS 制作的网站。analyzejs该网站调用另一种编程语言生成的库的函数。我只能调用这个库的函数;我无法修改这个库的太多内容。

到目前为止,我一直在使用该库的第一个版本:analyzejs-v1.js. 为了实现这一点,在frontend/public/index.html网站中,我有

<head>
  <script src="/lib/analyzejs-v1.js"></script>
  <!-- <script src="/lib/analyzejs-v2.js"></script> -->
</head>
<body>
  <div id="root"></div>
</body>
Run Code Online (Sandbox Code Playgroud)

我还有一个类型声明文件,frontend/src/defines/analyzejs-v1.d.ts如下所示:

declare function f1(): string;
declare function f2(): string;
...
Run Code Online (Sandbox Code Playgroud)

结果,在网站的代码中,我可以直接调用f1()使用analyzejs-v1.js

现在,我想添加该库的另一个版本analyzejs-v2.js。在网站的某些部分,我想f1()调用analyzejs-v1.js; 在网站的某些部分,我想f1()调用analyzejs-v2.js. 所以我想我需要向这些不同的版本添加诸如v1和之类的命名空间v2以避免冲突。然后,我就可以打电话v1.f1()v2.f2()

我尝试修改frontend/src/defines/analyzejs-v1.d.ts如下:

declare namespace v1 {
    function f1(): string;
    function f2(): string;
    ...
}
Run Code Online (Sandbox Code Playgroud)

在网站的代码中,我尝试使用v1.f1().

编译没有出现任何错误。但是,运行该网站并使用功能调用时,我在:v1.f1()上返回了错误。v1.f1()Unhandled Rejection (ReferenceError): v1 is not defined

有谁知道如何向这样的库添加命名空间?

K41*_*F4r 0

如果您像这样在代码中导入这些文件:

import analyzejs-v1 from '/lib/analyzejs-v1.js'
import analyzejs-v2 from '/lib/analyzejs-v2.js'
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您可以在不同的对象下调用它们:

analyzejs-v1.f();
analyzejs-v2.f();
Run Code Online (Sandbox Code Playgroud)