1
我已經在模塊內部聲明瞭四十個左右的函數,但也有一個將每個函數複製到全局名稱空間(或提供的任何目標對象)的方法。將模塊函數聲明覆制到全局名稱空間
module JsHamcrest {
declare function assertThat(actual: any, matcher: Matcher): void;
// lots and lots of Matcher factory methods
declare function bool(): Matcher;
declare function func(): Matcher;
declare function number(): Matcher;
declare function object(): Matcher;
declare function string(): Matcher;
...
declare function copyMembers(target: any): void;
}
這允許開發者使用的命名空間功能JavaScript作爲-是通過模塊名稱
JsHamcrest.assertThat(5, JsHamcrest.number());
或將它們複製到全局命名空間,以提高可讀性。
JsHamcrest.copyMembers(window);
assertThat('foo', string());
我想出迄今最短的解決方案是將每個功能分配給一個全局變量:
var number = JsHamcrest.number;
但至少在PhpStorm的JSDoc沒有應用到副本,並且它仍然容易出錯(儘管不那麼)。
tl; dr 如何聲明這些頂層定義而不復制粘貼它們,並仍然使用文檔自動完成IDE?
進口的作品,但PhpStorm不繼承文件或參數類型提示(對那些需要參數):'型腳本導入語句默認地將Impl「布爾」 [jshamcrest.d.ts]'。看起來這是唯一的出路,然後我會向PhpStorm提交一個功能請求。 – 2014-11-03 21:41:27
我想你可能是這方面的最高權威人士,但如果有人提出左場解決方案,我會把問題留待一天。 :) – 2014-11-03 21:42:05
我唯一的左場理念是你寫一個版本的聲明(也許是全局的),然後自動生成一個包裝版本的文件作爲一個副本(只要用模塊JsHamcrest {並用一個'}'結尾)。儘管存在更優雅的方法,但您可以使用批處理文件來完成此操作。這給你一個地方來管理聲明。我正在做一個類似的技巧,使內部和外部模塊的代碼工作:https://www.stevefenton.co.uk/Content/Blog/Date/201411/Blog/Creating-A-TypeScript-Module-For-使用內部和外部模塊/ – Fenton 2014-11-04 13:37:41