【问题标题】:Strange typescript error:" the name g does not exist in the current scope"奇怪的打字稿错误:“名称g在当前范围内不存在”
【发布时间】:2013-02-21 17:37:18
【问题描述】:

突然之间,我的代码无法编译,并且 tsc 抱怨“名称 g 在当前范围内不存在”。这是一个非常有趣的错误:

  • 我的代码中没有一个名为“g”的变量、类或接口
  • 我没有导入名为“g”的模块
  • 文件本身未命名为“g”

这里有一些代码:

export class SpawnMessage implements Message {
    tag: UID;
    id: number;
}

VisualStudio 用红色在“export”的“e”下划线,并抱怨“没有名称 g”。同样的错误信息散布在我的代码中最奇特的地方。

好吧,我想如果 g 如此重要,我会创建它。我在代码顶部添加了一个名为 g 的变量。错误消息并没有消失,它们只是移动了。例如,现在我的一个 cmets 显然是错误的。真的,如果有人告诉我这件事我不会相信,所以我做了一个截图: ![g 不存在][1]

不仅仅是 VisualStudio,还有 tsc。我重新启动了 IDE 和 shell,但错误仍然存​​在。自然又换地方了。

出了什么问题?

更新: 我修复了导出导入语句,但这并没有影响错误。 这是 jsfiddle 上的整个文件。代码相当丑陋,请记住这是正在进行的工作。事实上,我只是在错误出现时进行重构,并且从那以后就没有接触过文件。

http://jsfiddle.net/JT36W/

目前在这三个地方发现错误:

  1. Message 接口的右花括号
  2. SpawnMessage的构造函数最后一行的等号
  3. Game中方法requestSpawn的return语句前面的一些空格@

更新 2: 我重新启动了 VisualStudio 和命令提示符。错误仍然存​​在。然后我重新启动计算机,错误仍然存​​在。你可以看到我很绝望。这就是为什么我把它全部推送到 github,删除我的本地副本并再次克隆 repo。错误消失了。这是完全相同的代码,是完全相同的编译器。它甚至是我驱动器上的相同路径,但 tsc 编译代码。

我不会将其发布为我自己问题的答案,因为它确实令人不满意。如果你们中的一个人能解释这种奇怪的行为,也许这是一个已知的错误,我很乐意接受他的回答。

【问题讨论】:

  • 我很惊讶旧的export import 声明没有被捕获-应该突出显示。您正在使用哪个版本的 TS,哪个版本的 WebEssentials 2012(如果有),我们可以看到有问题的整个班级吗? TS 的 alpha 问题之一是它有时会发现错误,但会将其误报为其他错误。
  • 当然,你可以看到整个代码。但错误不仅限于一类。每次编辑后我都会改变位置,并且基本上无处不在。我将用整个文件创建一个 jfiddle
  • 修复导出导入不能解决问题
  • 问题是您没有提供我们可以重新创建的示例 - 所以我们无法帮助您。您需要创建一个最小示例来演示问题,因为只需将一部分代码扔到墙上,由于缺少引用,我们甚至无法编译,这意味着我们无法重新创建您的问题。我为您的示例中所有缺少的代码创建了定义 - 但我没有收到您描述的错误。考虑到这一点,您的问题无法以目前的形式回答。
  • 在第一行末尾添加分号是否可以解决您的问题?

标签: javascript node.js compiler-construction web typescript


【解决方案1】:

我相信我之前曾多次遇到此错误。当它谈论“g”或“b”时,它是在谈论它为您的类维护的内部原型继承链。对我来说,当在代码流中在子 SpawnMessage 之后定义基类 Message 时,会发生此错误或类似情况。只需先定义基类。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多