Мне нужно проверить глобальное окно на предмет объекта 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
Похожие вопросы
Новые вопросы
typescript
TypeScript - это типизированный надмножество JavaScript, которое компилируется в простой JavaScript. Он добавляет в JavaScript дополнительные типы, классы, интерфейсы и модули. Этот тег предназначен для вопросов, относящихся к TypeScript. Он не используется для ответов на общие вопросы по JavaScript.