在不相关的文件中“无法重新声明块范围变量”

2023-11-25

有一个简单的 TS 包用作 CommonJS 模块并且没有导出。 TS文件被编译为同名的JS文件并用作require('package/option-foo').

tsconfig.json:

{
  "compilerOptions": {
    "target": "es5"
  }
}

选项-foo.ts:

declare const GlobalVar: any;

function baz() {}

if (GlobalVar.foo) GlobalVar.baz = baz;

选项栏.ts:

declare const GlobalVar: any;

function baz() {}

if (GlobalVar.bar) GlobalVar.baz = baz;

这里重要的部分是option-foo and option-bar are 从未一起使用过。项目中还有其他免费的TS文件,但它们不会影响任何东西,只是需要将其转译为JStsc run.

When tsc运行,它抛出

无法重新声明块作用域变量“GlobalVar”。

重复的函数实现。

无法重新声明块作用域变量“GlobalVar”。

重复的函数实现。

for GlobalVar and baz在两个文件中。

如何处理这个问题而不使构建过程或这两个 TS 文件的输出复杂化?


TL;DR写吧export {}在文件的最外层范围内。


在某些时候,需要对文件是否应被视为文件进行语义消歧。module(并有自己的范围)或script(并与其他脚本共享全局范围)。

在浏览器中,这很容易 - 您应该能够使用<script type="module">标签,您将能够使用模块。

但是其他使用 JavaScript 的地方又如何呢?不幸的是,目前还没有标准方法来进行这种区分。

TypeScript 决定解决这个问题的方法是简单地声明模块是任何包含导入或导出的文件.

因此,如果您的文件没有任何顶级import or export声明,那么您偶尔会看到全局声明相互干扰的问题。

为了解决这个问题,你可以简单地有一个export不导出任何内容的声明。换句话说,只需写

export {};

文件顶层的某处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在不相关的文件中“无法重新声明块范围变量” 的相关文章

随机推荐

  • EscapeUriString 和 EscapeDataString 有什么区别?

    如果只处理url编码 我应该使用转义Uri字符串 我对现有的答案不满意 所以我决定更深入地挖掘来解决这个问题 令人惊讶的是 答案非常简单 有 几乎 没有正当理由使用Uri EscapeUriString 如果您需要对字符串进行百分比编码 请
  • 使用 Google Cloud Key Management Service 签署 JSON Web 令牌

    编辑 我找到了答案 滚动到这个问题的底部 我正在开发 NodeJS 身份验证服务器 我想使用 google 签名来签署 JSON Web 令牌 JWT 我正在使用 Google Cloud 密钥管理服务 KMS 并创建了一个密钥环和一个非对
  • C# - 如何知道 Windows 启动后何时“稳定”?

    我正在编写一个应用程序 该应用程序可以选择在 Windows 启动时运行 我无法忍受应用程序在我的电脑真正稳定下来之前就陷入困境 而且这是一个非关键应用程序 我希望我的应用程序礼貌地等待所有其他启动项完成并解决 以便用户的电脑在开始执行任何
  • 使用 ASP.NET MVC 区域路由找不到错误 404

    我在 MVC 5 中遇到区域路由问题 当我浏览到 Evernote EvernoteAuth 时 出现 404 找不到资源错误 我的区域看起来像这样 Areas Evernote Controllers EvernoteAuthContro
  • nodejs hapi 单页

    我有一个应用程序站点 NodeJS 我想从 Express 迁移到 Hapi 我通常做的是提供静态文件并将其他所有内容路由到包含 angularjs 应用程序和 Angular 路由配置的单个页面 Express routing first
  • 两个 Python 模块需要彼此的内容 - 这可以吗?

    我有一个 Bottle 网络服务器模块 其中包含以下行 from foobar formtools import auto process form insert And the foobar formtools模块包含这一行 from f
  • 如何比较多行?

    我想比较两个连续的行i with i 1 of col2 排序col1 If item i of the i第 行和item i 1 row是不同的 我想增加计数item i 1 by 1 col1 col2 row 1 item 1 ro
  • 协作编辑 LaTeX 文档的技巧 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我的默认设置是将 tex 源放入 subversion 存储库中 并在更改其他人的内容时将注释作为源中的注释相互插入 这一切都感觉不太理想 尤其是当存在颠覆冲突时 它告诉你的只是
  • 除非使用 Leiningen REPL,否则 Clojure jdbc create-table 语句不会运行

    我有一个小型 Clojure 程序 它使用Clojure JDBC在 HSQL 数据库中创建表的工具 然而 如果我从 Leiningen 的 REPL 运行它 它似乎只会实际创建该表 如果我使用运行代码 它不会创建表lein run或从我的
  • Java + Eclipse:同步 stdout 和 stderr

    我使用Eclipse 当我有这样的应用程序时 write 20 times Hello World n to stdout write ERROR n to stderr write 5 times Hello World n to std
  • 如何配置Spring-Boot应用程序以继续使用RestEasy?

    我有一个旧的 Web 应用程序 纯 servlet 没有 Spring 我想将其作为 fat jar 运行 这个应用程序提供了很多REST服务 我不想修改旧代码 如何配置Spring Boot应用程序以继续使用RestEasy 您可以使用
  • 在 Tapestry 5 中更新表单内的区域

    我有一个Zone里面一个Form the Zone已更新为包含我想绑定到父级的输入字段的块Form 不幸的是 这似乎并不像我希望的那么容易 因为我收到了以下错误消息 The Description component must be enc
  • FireFox 位于“从...传输数据”或“读取...”

    我正在使用 Selenium 为网站构建一些功能测试 但我遇到了一个奇怪的浏览器问题 页面似乎永远无法完成加载 状态栏显示 正在从 传输数据 或 读取 由于页面永远不会完成加载 我的硒测试超时 该问题似乎只发生在 FireFox 上 我们的
  • cv2.connectedComponents 未检测到组件

    我使用的是 Ubuntu python 2 7 使用 OpenCV 我试图准确理解函数 cv2 connectedComponents 正在做什么 这是图像 代码 import cv2 import numpy as np img cv2
  • 在 Django 中动态删除内联表单集

    是否可以让 Django 自动删除请求中不存在的表单集 例如 如果在加载编辑页面时我有三个以 HTML 表示的内联表单集 并且在处理请求时使用 javascript 删除其中两个表单集 则 Django 会发现这两个表单不再是它们的 并将它
  • Angular 6 / NGRX 联合减速机

    我正在使用 Angular 6 w NgRX 4 我有多个想要组合的减速器 应用程序模块 ts import BrowserModule from angular platform browser import NgModule from
  • 如果父级有 ng-if,Angular ng-show 不起作用

    我有一个视图 其中父 div 上有 ng if 而某些子元素上有 ng show 当嵌套在带有 ng if 的元素下时 ng show 似乎无法正常工作 这是 Angular 的错误还是我做错了什么 看看这个笨蛋 HTML div div
  • 使 Java 属性跨类可用?

    我选择使用属性文件来自定义某些设置 我使用以下代码使属性对象在类中可用 Properties defaultProps new Properties try FileInputStream in new FileInputStream cu
  • 如果使用 jQuery 文本为“0”,如何隐藏“span”?

    我正在寻找隐藏包含 0 的跨度 我查看了其他代码并尝试对其进行调整 但无法使其正常工作 我希望它仅在内容为 0 时隐藏跨度 但是当运行下面的代码时 它也会隐藏任何包含 0 的数字 例如 10 这是我不想要的 为了更清楚一点 跨度只应在其内部
  • 在不相关的文件中“无法重新声明块范围变量”

    有一个简单的 TS 包用作 CommonJS 模块并且没有导出 TS文件被编译为同名的JS文件并用作require package option foo tsconfig json compilerOptions target es5 选项