2017-07-06 54 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