2015-09-27 90 views
1

所以我是一個C++程序員,他在Dart製作了一些東西,現在正在轉換到Typescript。我一次只處理一個問題,現在單個文件充滿了課程,現在開始接觸到我。當試圖找到關於此事的信息時,我很驚訝有很多包含文件的方法,並且每種方法都非常冗長。事實上,這整個話題仍然是前沿,正在積極發展。多個文件的打字稿

所以我沒有使用任何外部庫,所以內部模塊會做。然而,當我嘗試初始化的全局變量誰的類是在另一個打字稿文件相同的模塊名稱,我得到以下錯誤下定義:

0x800a01bd - JavaScript的運行時錯誤:對象不支持此操作

當在StackOverflow上查找時,我可以找到完全相同的場景: Spanning one Typescript module across files gives 0x800a01bd - JavaScript runtime error: Object doesn't support this action

但是我是否相信我應該將每個.js文件以這樣的順序送入html,以便一切都可以解決?當然這不可能是正確的,爲什麼Visual Studio不能解決我的命令並吐出一個.js文件?

我試過設置Typescript構建組合成一個單一的.js文件,並引用到我的HTML中。那實際上曾經工作過一次,之後每次都失敗。 (緩存?)顯然我必須錯過一些東西,所以我想請求你的幫助。

在Dart中這是非常直接的,但在打字稿中這是非常混亂和麻煩的。 AMD,UMD,tsconfig.json等......作爲一名C++人員,我喜歡命名空間和包含指令,最重要的是它們很簡單,只需提供所需的所有功能。

那麼什麼是最相關的,最新的處理方式,我在這裏失蹤了什麼?

回答

0

因此,當懷疑使用多個文件時,您必須按照所有內容都可以解決的順序將它們饋送到您的HTML中。 (請不要...)

將JavaScript輸出合併到一個文件時,請確保選擇了ECMAScript 5,而不是ECMAScript 6,因爲那樣會崩潰並刻錄。

同時刪除合併的Javascript文件以確保生成新文件。您也可能想要做一些清理工作,因爲VS2015不會爲您刪除任何.js & .js.map文件,因此您的目錄可能會散佈無用的文件。

/更新

您需要刪除生成的合併的Javascript每次構建時文件,因爲它不會以其他方式更新...

0

我不使用Visual Studio 2015年,但我將介紹一種簡單的方法來設置命名空間的單個文件TypeScript項目,該項目將使用tsc進行編譯。

在你的項目中包含的根目錄下創建文件tsconfig.json

{ 
    "compilerOptions": { 
     "target": "es5", 
     "out": "SomeNamespace.js" 
    } 
} 

這將告訴打字稿編譯器編譯一切都在目錄中有.ts擴展到一個名爲SomeNamespace.js單個文件。

創建一個名爲Foo.ts一個例子文件,其中包含:

namespace SomeNamespace { 
    export class Foo {} 
} 

注意,我用namespace代替module。內部模塊現在稱爲命名空間,可以使用namespace關鍵字。

Going forward, internal modules will be called ‘namespace’. We chose to use this term because of the closeness between how this form works and namespaces in other languages [...] http://blogs.msdn.com/b/typescript/archive/2015/07/20/announcing-typescript-1-5.aspx

創建名爲Bar.ts另一個例子文件,其中包含:

/// <reference path="Foo.ts"/> 

namespace SomeNamespace { 
    export class Bar {} 
} 

這其中包含了Foo.ts參考。這確保在編譯期間包含在Foo.ts中的代碼包含在Bar.ts之前。

最後,在tsconfig.json文件所在的項目目錄中運行tsc,所有內容都將編譯爲SomeNamespace.js

作爲便箋,您可以運行tsc --watch讓編譯器在保存時編譯。