当前位置: 首页 > 知识库问答 >
问题:

在Typescript中的文件中本地处理全局变量

步博涉
2023-03-14

我公司的工作方式很奇怪。我们使用PHP模板引擎将所有文件复制到一个超文本标记语言中并提供服务。它如下所示:

主html

<script>
    (() => {
        const foo = 'bar';
        {{ include('xxx.js') }}
    })
    {{ include('zzz.js') }}
</script>

xxx。输电系统

declare const foo: string;
(() => {
    console.log(foo);
})()

如您所见,IIFE有两层,一层在主超文本标记语言中,另一层在每个. ts中,以确保变量的范围正确包含在每个. ts文件中。然后我使用tscxxx.ts编译成xxx.js

问题是现在我有一个附加文件yyy.ts,我想在main.html的IIFE中包含xxx.ts。让我们假设yyy.tsxxx.ts完全相同。

yyy.ts

declare const foo: string;
(() => {
    console.log(foo);
})()

在这里,我在两个文件中的foo处遇到问题。错误是无法重新声明块范围的变量

我无法将foo放入全局。d、 tsfile因为它不是全局的,因为它只对xxx有效。js和yyy。js

我做了一些阅读,看到TS编译的方式是,如果文件没有导入/导出,它会将所有变量视为全局变量。

我如何解决这个问题?我可以想出两种方法:

  • 找到一种方法设置tsconfig,将每个文件视为单独的文件。我还没有找到解决这个问题的好方法

感谢您的帮助。谢谢


共有1个答案

鞠建安
2023-03-14

我有种感觉,你不明白我关于生活的观点是用PHP而不是TS来完成的。所以我觉得如果我举一些例子的话可能会有意义。

从我收集到的信息来看,你有一个叫做foo的全局变量,你希望它包含在xxx中

首先,不要把生命放在TS文件中。否则,您将无法重新声明块作用域变量

下面是一个想法,我相信你会做什么后。

文件xxx。TS

declare const foo: string;

const msg = "hello";
console.log(`${msg) ${foo)`);

文件zzz。输电系统

declare const foo: string;

const msg = "goodbye";
console.log(`${msg) ${foo)`);

现在,如果在我们的PHP文件中,我们确实-

<script>
    (() => {
      const foo = 'bar';
      (() => { {{ include('xxx.js') }} })
      (() => { {{ include('yyy.js') }} })
    })
</script>

所以在上面,首先你有一个全局var foo,但只对你的TS文件是全局的,每个TS文件也可以有它自己的本地var。在上面你可以看到我定义了一个本地var msg,它有hello

因此,如果你运行上面的程序,你应该会看到类似的结果-

hello bar
goodbye bar

以上这些都不会污染你的windows global。

 类似资料:
  • 在JavaScript中,我可以这样做: 然后在另一个文件中: 它将定义

  • 我在typescript中声明了一个全局变量,类似于:global。test=“something”我尝试这样做,我得到错误属性“test”在类型“Global”上不存在。

  • 如果我在我的main.js文件中有一个全局变量,我希望可以在由webpad捆绑到同一个构建/bundle.js中的打字稿文件中访问它,我该怎么做?我不能像我想象的那样直接访问它(最后它们在同一个捆绑包中)。我已经阅读了导出/导入/要求,但找不到如何在webpad捆绑包的上下文中应用它。

  • 我知道有一些关于这个问题的问题和帖子/文章,但从我的新手角度来看,不完全是这样。问题是,我有一个主程序监听一个端口,并将调用重定向到一个特定的处理程序。典型结构: 处理程序类似于: 然后,包含函数foo的一些全局变量,基本上是因为函数共享需要它们(例如,当使用容器/堆实现的优先级队列时,它将从全局距离矩阵中获得Swap函数中的优先级当然是可变的)。以及许多其他例子。总之,全局变量... 问题是,正

  • 问题内容: 先前曾问过一个有关如何覆盖环境指令中定义的变量的问题,看来这是不可能的。 我想在一个阶段中设置一个变量,并使其可用于其他阶段。在声明性管道中,似乎唯一的方法是在script {}块中。 例如,我需要在结帐后设置一些变量。因此,在结帐阶段结束时,我有一个script {}块来设置这些var,并且可以在其他阶段访问它们。 这可行,但感觉不对。并且出于可读性考虑,我更愿意在管道的顶部声明这些

  • 问题内容: 我有2个守护程序,它们应该访问相同的变量。我为全局变量创建了第3个文件,每个守护程序都可以访问该变量。但是,当一个更改变量时,另一个仍然看到默认值。 例: glob.py 守护程序a: 守护程序b: 每次我希望我将问题弄清楚时,它将打印0,并且有人可以帮助我。如果您需要更多信息,请随时询问。 问题答案: 看起来(尽管您没有明确告诉您)您正在以一种完全独立的方式运行程序:Python解释