2016-09-12 14 views
2

解決とコンパイルを正しく行うためにファイル間で名前空間を取得する際に問題があります。 documentationこのSO answerによると、次は何の問題を生成してはならない:ファイル間でマージされたTypeScript名前空間

App.Core.ts

namespace App.Core { 
    export function createElem(tagName: string): JQuery { 
     return $(document.createElement(tagName)); 
    } 
} 

App.Core.SubModule.tsしかし、Visual Studioが与えている

/// <reference path="App.Core.ts" /> 
namespace App.Core.SubModule { 
    export function Test(): JQuery { 
     return App.Core.createElem("div"); 
} 

を私はの関数呼び出しでエラーが発生しましたProperty 'createElem' does not exist on type 'typeof Core'私の理解では、名前空間が複数のファイルにまたがっている場合、TSコンパイラはそれらの名前空間を自動的に解決します。対応するJavaScriptが正しく出てきているように見えますが、インテリセンスの欠如(と赤い絡み目のエラーライン)は非常にイライラしていて、私が何を書いているのか推測してくれます。

これは私のファイル設定、TSコンパイラ、またはVisual Studio 2015の明らかに壊れているTypeScriptインテリセンス機能の問題ですか?

+1

このコードはWebstormで正常にコンパイルされます。私は、結合された出力のファイルの順序が違いをもたらすと考えています。それを見てみましょう。とにかく、可能であれば、名前空間から離れ、外部モジュールを使用してください。これはあなたにこれらの頭痛の多くを保存します –

+0

あなたの助言に従って、代わりに外部モジュールを使用しました。 Typescriptはまだ私にとっては非常に外国のアイデアです。 Typescriptの出力が 'require.js'のような他のリソースなしでブラウザで動かないことを認識するために、少し調べて掘り下げました。間違いなくTSドキュメンテーションでそれを解読して見つけるのは難しいことでした。しかし、助けてくれてありがとう!最後に、私のプロジェクトの次の部分に移動することができます! – Bwolfing

答えて

3

Visual Studioが

ルートを持っている容疑者のコアtypeof演算 "がタイプに存在していない私にプロパティ「createElem」を明記App.Core.SubModule.Testにおける関数呼び出しのエラーを与えていますいずれかのファイルのレベルimportまたはexportこれはファイルをモジュールにし、グローバル名前空間から切断します。

クイックフィックス

そのインポート/エクスポートを削除しますが、それは多くの問題https://basarat.gitbooks.io/typescript/content/docs/tips/outFile.html

適切な修正

名前空間を使用しないでくださいにつながる可能性があると警告します。モジュールを使用してください:https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

+0

第1号を修正した外部モジュールに変換しました!今私は、私のMVCアプリケーションの領域にTSファイルを実装しようとしている、私はそれを参照する私のApp.Core.tsモジュール。しかし、私は2つの問題を見つけています:1)相対パスが( 'require(" ../../../ Scripts/TypeScript/App.Core ")')を作成するのが面倒になり、2)私は試していますTSとJSをそれぞれScripts/TypeScriptとScripts/JSに入れることでTSとJSを分離した状態に保ちます。 TSインポートはTSフォルダを参照してコンパイルする必要がありますが、JS出力はJSフォルダを参照する必要があります。このようなフォルダ構造を作成することは一般的には勧められていませんか? – Bwolfing

+0

こんにちは@バサラート。なぜ「正しい修正」は名前空間をまったく使用していないのだと思いますか?私が理解している限り、私は、C#で書かれたバックエンドコードとTypeScriptのフロントエンドを持つASP.NETプロジェクトでそれらを使う方がはるかに良い選択だと思います。私は、このシナリオでは、モジュールは過剰なものだと思います。 –

+0

ありがとうございます!私の人生は何がうまくいかないのか理解できませんでした。グローバルな名前空間を使ってファイル内で 'import'を使うことはできませんか? – jbmilgrom

関連する問題