2017-07-06 2 views
1

J'ai besoin de vérifier la fenêtre globale pour un objet init_data qui peut ou ne peut pas être là. Essayer d'y accéder directement Tapascript s'est plaint: Property 'init_data' does not exist on type 'Window'Comment vérifier les propriétés conditionnelles sur l'objet fenêtre globale dans Typescript

J'ai eu une solution de contournement, mais il ne fonctionne plus avec Typescript 2.4.

La solution est:

interface Window { 
    init_data?: any 
} 

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

Cela jette maintenant l'erreur: error TS2559: Type 'Window' has no properties in common with type 'Window'.

Répondre

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

Merci qui a travaillé! Je ne comprends pas pourquoi le tapuscrit ne se plaint pas? Ou pourquoi il se plaignait en premier lieu? – micahblu

+1

Lorsque vous utilisez foo.bar, TypeScript vérifie que cette barre est bien une propriété déclarée de foo. Lorsque vous utilisez foo ['bar'], vous traitez foo comme un dictionnaire/une carte. C'est ainsi que vous dites au compilateur TS que cette barre est une propriété dynamique de foo. Et il ne vérifie donc pas si cette propriété existe. –

+0

Merci pour la clarté ~! – micahblu