Мне нужно проверить глобальное окно на предмет объекта init_data, который может там находиться, а может и не быть. Пытаясь получить к нему прямой доступ, Typescript пожаловался: Property 'init_data' does not exist on type 'Window'

У меня был рабочий обходной путь, но он больше не работает с 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'.

1
micahblu 7 Июл 2017 в 00:54

1 ответ

Лучший ответ
const isLoggedIn = () => !!window['init_data'];
4
JB Nizet 7 Июл 2017 в 00:57
Спасибо, что сработало! Я не понимаю, почему машинописный текст не жалуется? Или почему он вообще жаловался?
 – 
micahblu
7 Июл 2017 в 01:03
1
Когда вы используете foo.bar, TypeScript проверяет, действительно ли bar является объявленным свойством foo. Когда вы используете foo ['bar ’], вы рассматриваете foo как словарь / карту. Таким образом вы сообщаете компилятору TS, что bar является динамическим свойством foo. Таким образом, он не проверяет, существует ли это свойство.
 – 
JB Nizet
7 Июл 2017 в 01:09
Спасибо за ясность ~!
 – 
micahblu
7 Июл 2017 в 01:16