2

突然、私のコードはコンパイルされず、tscは「名前gが現在のスコープに存在しません」と文句を言います。これは本当に面白いエラーです:

  • 私のコードのどこにも「g」という名前の変数、クラス、またはインターフェースはありません
  • 「g」という名前のモジュールをインポートしていません
  • ファイル自体は「g」という名前ではありません

ここにいくつかのコードがあります:

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

VisualStudioは、「エクスポート」の「e」を赤で強調し、「名前gがない」と文句を言います。同じエラーメッセージが、コード全体の最も特殊な場所に散らばっています。

さて、gがとても重要なら、私はそれを作成するだけだと思いました。コードの先頭にgという名前の変数を追加しました。エラーメッセージは消えず、移動しただけです。たとえば、私のコメントの1つが明らかに間違っています。本当に、誰かがそれについて私に言ったら、私はこれを信じないでしょう、それで私はスクリーンショットを作りました:![gは存在しません] [1]

VisualStudioだけでなくtscでもあります。IDEとシェルを再起動しましたが、エラーが解決しません。当然、また場所が変わりました。

何が悪かったのか ?

更新:エクスポートインポートステートメントを修正しましたが、エラーには影響しませんでした。これがjsfiddleのファイル全体です。コードはかなり醜いです、これは進行中の作業であることを覚えておいてください。実際のところ、エラーが表示されてからファイルに触れていないため、リファクタリングを行っていました。

http://jsfiddle.net/JT36W/

現在、エラーは次の3つの場所で見つかります。

  1. Messageインターフェイスの閉じ中括弧
  2. のコンストラクタの最後の行の等号SpawnMessage
  3. requestSpawnクラス内のメソッドのreturnステートメントの前にある空白Game

更新2: VisualStudioとコマンドプロンプトの両方を再起動しました。エラーが解決しませんでした。その後、コンピュータを再起動しましたが、エラーはまだ残っていました。あなたは私が必死だったことがわかります。そのため、すべてをgithubにプッシュし、ローカルコピーを削除して、リポジトリのクローンを再度作成しました。エラーはなくなりました。これはまったく同じコードであり、まったく同じコンパイラです。それは私のドライブの同じパスですが、tscはコードをコンパイルします。

本当に物足りないので、自分の質問への回答として投稿しません。この奇妙な振る舞いを説明できる人がいれば、それは既知のバグかもしれませんが、私は喜んで彼の答えを受け入れます。

4

1 に答える 1

1

私は以前にこのエラーに数回遭遇したと思います。それが「g」または「b」について話すとき、それはあなたのクラスのためにそれが維持する内部プロトタイプ継承チェーンについて話します。私の場合、このエラーまたは同様のエラーは、コードフローでMessage子の後に基本クラスが定義されたときに発生します。SpawnMessage最初に基本クラスを定義するだけです。

それが役に立てば幸い。

于 2013-03-17T06:02:00.997 に答える