2016-10-30 60 views
2

我是一位經驗豐富的Java開發人員,他需要移植Java應用程序以供Web使用,並且我一直在考慮使用Typescript來執行此操作。目前,我希望保持傳統的Java風格的包是文件夾層次結構,並且每個「葉子」文件包含一個類。傳統文件夾層次結構中的TypeScript類

我一直在尋找打字稿文檔,我看到像../path/to/module的東西。都包括那樣的親戚嗎?是否有某種基本目錄選項,我可以得到類似import com.ancient.java.MyType;的東西?

此外,是宣佈package com.ancient.java;東西要在Typescript?

我看過了的文檔,但我沒有找到他們很容易與所有人都在談論的內部和外部命名空間和出口閱讀等

有人可以熬下來的東西,會覺得像我一樣從Java開始?我相信我會在需要的時候再次進入所有複雜的東西。這在代碼中看起來像什麼?

回答

4

將您的打字稿類組織成1類,每個文件和有組織的文件夾層次結構是完全可以接受的,甚至可以在打字稿中得到鼓勵。

如果使用typescript 2.0或更高版本,您的路徑不需要是相對的。您可以使用baseUrl:屬性來指定非相對(即沒有0​​或..)路徑的根源。例如,你有:

tsconfig.json 
src/ 
    foo/ 
     foo.ts 
    bar/ 
     bar.ts 

您可以設置"baseUrl": "./src",然後你可以import 'foo/foo'import 'bar/bar'不使用相對路徑導航。

我會阻止你嘗試在typescript中聲明包/命名空間/內部模塊等。這些類型的東西大多是過去的遺留物,而不是我想冒險在新項目中使用的東西。

我推薦的是堅持使用基於文件的模塊,因爲這是用於組成應用程序的現代推薦方法。

具有importexport語句的文件被視爲「文件模塊」。其中定義的所有東西都是該文件的私有文件,不會污染全局名稱空間。應該共享的東西需要從其他文件導出和導入。

例如,你可以寫MyType類的文件結構是這樣的:

src/ 
    com/ 
     ancient/ 
      my-type.ts 

my-type.ts會是什麼樣子:

export class MyType{ 
    constructor(){ 
     console.log('Hello World'); 
    } 
} 

,然後你可以將其導入其他文件,如:

import {MyType} from 'com/ancient/my-type' 

您不應該需要使用密鑰字namespacemodule。這些主要是隻能在類型聲明文件中找到的東西。

+0

一對小點。其中一個'外部模塊'就是ES2015模塊,不應該氣餒。二,'declare module'仍然在.d中經常使用。ts文件,而不僅僅是傳統文件。 – Paarth

+0

你是對的,儘管它們不再被稱爲「外部模塊」。雖然正式它們只是「模塊」,但我喜歡稱它們爲「文件模塊」,以強調文件本身就是模塊,而不是使用「decalre模塊」。你在現代申報文件中的潛在用途也是正確的。我正在考慮一個特定的用途,而不是其他人,例如重新打開模塊並增加其類型的能力。我做了相關的編輯以避免混淆。 – dtabuenc