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

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

  • 无处不在我的代码是一个variables,类或接口名为“g”
  • 我没有导入一个名为“g”的模块
  • 该文件本身不被命名为“g”

这是一些代码:

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

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

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

这不仅仅是VisualStudio,也是TSC。 我重新启动了IDE和shell,但错误仍然存​​在。 自然它又改变了地方。

什么地方出了错 ?

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

http://jsfiddle.net/JT36W/

现在错误在这三个地方被发现:

  1. Message接口的大括号
  2. SpawnMessage构造函数的最后一行中的SpawnMessage
  3. 在类Game requestSpawn方法的返回语句前面有一些空格

更新2:我重新启动VisualStudio和命令提示符。 错误依然存在。 然后我重新启动了我的电脑,错误仍然存​​在。 你可以看到我很绝望。 这就是为什么我把这一切都推到github,删除我的本地副本,并再次克隆回购。 错误消失了。 它是完全相同的代码,它是完全相同的编译器。 它甚至是我的驱动器上的相同path,但是TSC编译代码。

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

我相信我以前曾经遇到过这个错误。 当它谈到“g”或“b”时,它正在讨论它为你的类所维护的内部原型inheritance链。 对于我来说,当代码stream中的子类SpawnMessage之后定义了基类Message时,会发生此类错误或类似事件。 首先简单定义基类。

希望能帮助到你。