Почему declare const window: any;
?
Поскольку вы объявляете локальную переменную типа any
. Наличие чего-то типа any
по сути отключает проверку типа для window
, так что вы можете делать с ним все что угодно. Я действительно не рекомендую это решение, оно действительно плохое.
Почему type Window = { FB: any }
не работает?
Вы определяете тип Window
. Этот тип, если он определен в модуле, не имеет ничего общего с типом глобального window
объекта, это просто тип, который называется Window
внутри вашего модуля.
Хорошее решение
Для расширения window
необходимо расширить глобальный интерфейс Window
. Вы можете сделать это так:
declare global {
interface Window {
FB:any;
}
}
let FB = window.FB; // ok now
Обратите внимание, что это расширение будет доступно во всем вашем проекте, а не только в файле, в котором вы его определяете. Также, если у FB
есть определения, вы можете набрать его немного лучше (FB: typeof import('FBOrWhateverModuleNameThisHas')
)