2017-07-14 118 views
0

導入型環境聲明,我有我的打字稿項目的聲明文件,像這樣:在打字稿

// myapp.d.ts 
declare namespace MyApp { 
    interface MyThing { 
    prop1: string 
    prop2: number 
    } 
} 

這個偉大的工程,我可以在我的項目的任何地方使用此命名空間,而無需將其導入。

我現在需要從一個第三方模塊導入一個類型,在我的環境聲明中使用它:

// myapp.d.ts 
import {SomeType} from 'module' 

declare namespace MyApp { 
    interface MyThing { 
    prop1: string 
    prop2: number 
    prop3: SomeType 
    } 
} 

編譯器現在抱怨說,它無法找到命名空間「MyApp的」,大概是因爲進口防止它成爲環境。

在利用第三方類型時,是否有一些簡單的方法可以保留聲明的環境?

回答

1

不幸的是,沒有。正如您已經發現這隻適用於內部代碼,例如無需外部依賴。您應該導出您的名稱空間,或者導出類並使用ES6模塊。但兩者都會導致你需要import你的東西。正如我相信的那樣,你正試圖避免的事情。

就我個人而言,我覺得在整個代碼中實際使用導入(甚至是內部)更加令人欣慰。這很簡單,因爲打開特定文件(類)時,其所有依賴關係都立即可見。

在問題"How to use namespaces with import in TypeScript"中已經解決了一個徹底的例子。

其他人的注意事項:「內部可用的命名空間」也是我不考慮這個重複問題的原因。