2017-07-06 62 views
1

我需要檢查全局窗口中是否有可能存在或不存在的init_data對象。試圖直接訪問它Typescript抱怨:Property 'init_data' does not exist on type 'Window'如何檢查Typescript中全局窗口對象的條件屬性

我有一個工作的解決方法,但它不再適用於Typescript 2.4。

的解決方法是:

interface Window { 
    init_data?: any 
} 

const isLoggedIn = function() { 
    let win:Window = window 
    return win.init_data ? true : false 
} 

現在,這引發錯誤:error TS2559: Type 'Window' has no properties in common with type 'Window'.

回答

3
const isLoggedIn =() => !!window['init_data']; 
+0

感謝那些工作!我不明白爲什麼打字稿不會抱怨?或者爲什麼它起初抱怨? – micahblu

+1

當您使用foo.bar時,TypeScript會檢查該條的確是foo的一個聲明屬性。當你使用foo ['bar']時,你將foo視爲詞典/地圖。這是您告訴TS編譯器bar是foo的動態屬性的方式。因此它不檢查該財產是否存在。 –

+0

謝謝您的澄清〜! – micahblu