奇怪的打字稿错误:“当前范围中不存在名称g”

时间:2013-03-06 18:55:43

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

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

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

以下是一些代码:

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

VisualStudio以红色突出显示“导出”的“e”,并抱怨“没有名字g”。在最奇特的地方,我的代码中都会出现相同的错误消息。

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

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

出了什么问题?

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

http://jsfiddle.net/JT36W/

现在错误发生在以下三个地方:

  1. Message界面的结束花括号
  2. SpawnMessage
  3. 的构造函数的最后一行中的等号
  4. requestSpawn中方法Game的return语句前面的一些空格
  5. 更新2: 我重新启动了VisualStudio和命令提示符。错误仍然存​​在。然后我重新启动了我的电脑,错误仍然存​​在。你可以看到我绝望了。这就是为什么我把它全部推到github,删除我的本地副本并再次克隆回购。错误消失了。它是完全相同的代码,它是完全相同的编译器。它在我的驱动器上甚至是相同的路径,但是tsc编译代码。

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

1 个答案:

答案 0 :(得分:1)

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

希望它有所帮助。