本文作者:文藺
本文地址:http://www.wemlion.com/2016/ts-note-on-global-reference/
本文由 @文藺 創(chuàng)作土全,轉(zhuǎn)載請保留此聲明华临。
所有權(quán)保留,請勿用作商業(yè)用途柔滔。
朋友的朋友,最近的一個項目使用了 angular.js憋飞,是使用 typescript 開發(fā)的搭幻。
讓我驚奇的是,竟然還是使用 1.2 版本窟社。
項目還引用了一個外部 js(沒有現(xiàn)成的 .d.ts
文件可用)。這個 js 文件暴露了一個全局變量绪钥,需要在 ts 文件中調(diào)用灿里。暫且命名為 ClassOutOfTS
。
那么問題來了程腹。在 ts 中直接調(diào)用 new ClassOutOfTS()
會引起編譯報錯匣吊,因為 ts 編譯器根本就找不到 ClassOutOfTS
的定義。
想想實在沒什么好辦法。那就自己去寫個 .d.ts
文件好啦色鸳。
等等社痛,好像不對。
我最近兩周的空閑時間在看 angular2命雀,好像有個例子中蒜哀,出現(xiàn)過對 window
特殊處理的情況。
查查代碼吏砂,還真有撵儿。廢話少說,直接上代碼:
var ins:any = (<any>window).ClassOutOfTS();
雖然這辦法很黑狐血,可是也沒什么更好的了淀歇。
簡單解釋下。上面這行代碼中匈织,關(guān)鍵部分是 <any>window
這一句浪默。<any>
在這里的作用是強制類型轉(zhuǎn)換。
編譯器并不知曉 window 下面有哪些屬性缀匕、方法纳决。但強制轉(zhuǎn)換成 any 類型之后,就不會報錯了弦追。
單記錄下岳链。以備不時之需。