2016-09-12 136 views
2

我在獲取文件名稱空間以正確解析和編譯時遇到了一些問題。根據documentationSO answer,下面應該不會產生問題:TypeScript名稱空間跨文件合併

App.Core.ts

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

App.Core.SubModule.ts

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

但是,Visual Studio是給我在App.Core.SubModule.Test函數調用錯誤,指出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是給我在App.Core.SubModule.Test函數調用,說明住宅「createElem」錯誤的類型不存在「typeof運算核心」

懷疑你有一個根任何一個文件中的級別爲importexport這使得該文件成爲模塊,並將其從全局命名空間中斷開。

快速修復

刪除導入/導出,但警告說,它可能導致更多的問題https://basarat.gitbooks.io/typescript/content/docs/tips/outFile.html

適當的修復

不要使用命名空間。只需使用模塊:https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

+0

我轉換爲固定第一個問題的外部模塊!現在我試圖在我的MVC應用程序的Area中實現一個TS文件,並且我希望它引用我的App.Core.ts模塊。然而,我發現兩個問題:1)相對路徑變得繁瑣創建('require(「../../../ Scripts/TypeScript/App.Core」)'),2)我在嘗試通過分別將它們放入Scripts/TypeScript和Scripts/JS來保持TS和JS分離。 TS導入需要引用TS文件夾進行編譯,但JS輸出需要引用JS文件夾。通常不建議像這樣創建文件夾結構? – Bwolfing

+0

嗨@basarat。你爲什麼認爲,「正確的修復」根本不使用命名空間?據我瞭解,我認爲他們在ASP.NET項目中使用它們是更好的選擇,在C#中有後端代碼,在TypeScript中有前端代碼。我認爲,在這種情況下,模塊是矯枉過正的。 –

+0

謝謝!我的生活無法知道哪裏出了問題。你能不能在一個使用全局命名空間的文件中使用'import'? – jbmilgrom

相關問題