2017-03-05 71 views
1

我有一個Node.js項目,最近我從ECMAScript 6兼容的JavaScript轉換爲TypeScript。我仍然不完全熟悉TypeScript和ES6如何交互,特別是關於命名空間和類型。TypeScript ES6命名空間

我在我的項目中有一個名爲sql的子文件夾,它聽起來會導出一些函數來與項目的MySQL數據庫進行交互。我想在Sql.Models命名空間中組織我的數據庫模型類型,以便它們可以被引用,例如Sql.Models.User。我希望我的模型在sql文件夾中的一個或多個.d.ts文件中聲明,但我無法弄清楚如何正確組織這些文件,以便這些類型可以在其他地方引用。我顯然不能requireimport a .d.ts文件;這不是有效的TypeScript操作。如何在另一個與ES6兼容的TypeScript模塊中使用在.d.ts文件中聲明的類型Sql.Models.User

回答

0

如何在另一個與ES6兼容的TypeScript模塊的.d.ts文件中聲明Sql.Models.User類型的聲明?

以下非常簡單的設置工作。

root 
    sql 
    models.d.ts 
    index.ts 
    tsconfig.json 

model.d.ts文件聲明瞭一個名稱空間和一個類型。如圖所示,index.ts文件可以對該命名空間進行別名和/或直接訪問它。

enter image description here

上面使用打字稿版本2.2.1。

+0

當我這樣設置時,我無法從另一個具有根級別名稱空間'Sql'的文件訪問'Sql.Models'。也許我對C#工作方式的想法太多了,其中多個文件可以參與命名空間。 我想有一個類提供'Sql'命名空間,並且是我項目中需要的其他人的唯一文件。它將定義一些常見的功能,例如'query'。但是我也想要提供其他名稱空間,例如上面描述的模型,它們都是'Sql'命名空間的子節點。 – briman0094

+0

我的理解是你想擁有一個名爲'Sql'的命名空間和另一個名爲'Sql.Models'的子命名空間嗎? –

+0

這是正確的。我認爲我設法通過在'sql.ts'旁邊有一個'models.ts'文件來導出模型接口,然後將它們導入'sql.ts'並將它們重新導出到它們的適當命名空間中文件('import * as models from「./models」'然後後面'導出命名空間Sql {導出命名空間Models {export type User = models.User;}}'。這不是我想要的漂亮,但是它工作併產生我想要的最終結果。 – briman0094

0

我通過使用「別名的內部導入」,這聽起來很奇怪,但實際上並非如此,而是以一種不太漂亮的方式解決了這個問題。我將別名導出到內部符號,這恰好是從另一個文件導入的符號。

source code

我寧願怎麼樣C#的作品,在那裏我可以在兩個文件中定義命名空間,不知何故別名一個從其他的東西,以便只有一個文件需要被引用,但這個似乎沒有與ECMAScript 6兼容的TypeScript可能。