Подтвердить что ты не робот

Использование функций области видимости в Typescript

Я думаю, что это было где-то, в какой-то момент, адресовано только для жизни меня, я не могу вспомнить, так вот мой вопрос:

Я выполняю работу javascript, которая будет загружена в существующее приложение. Это приложение обладает множеством доступных функций, и вряд ли кто-либо из них мне известен, кроме некоторых, которые я хочу использовать. Так что давайте скажем, что я знаю, что для меня будет доступна функция window.srslyUsefulFunction, и мне все равно, если вы портируете это на определение typescript.

Итак, вопрос в том, как я могу использовать window.srslyUsefulFunction в моем собственном файле typescript без создания для него определения?

Пример:

class MyClass {
    public MyMethod (id : string) : void {
        // do something 
        var result = window.srslyUsefulFunction(id);
        // do something (with the result)
    }
}
4b9b3361

Ответ 1

Вы можете добавить функцию в интерфейс Window, а затем использовать ее в своей программе TypeScript:

interface Window {
    srslyUsefulFunction(id: number): void;
}

class MyClass {
    doSomething() {
        window.srslyUsefulFunction(1);
    }
}

Ответ 2

У меня есть простой способ обхода.

В index.html

function playIntro() {
        intro = new lib.intro();
        onlinePlayer.contentContainer.addChild(intro);
        stage.update();
    }

в моем Main.ts Я называю это следующим:

private onClick(event): void {

        if (window.hasOwnProperty('playIntro')) {
            window['playIntro'].call();
        }
    }

Итак... если вы хотите вызвать функцию "blind" js из глобальной области, просто используйте окно [ "foo" ]. call();

Ответ 3

Проверьте, существует ли функция. Если это не так, объявите его:

if(!window.hasOwnProperty('srslyUsefulFunction')
 || typeof window['srslyUsefulFunction'] !== "function"){
    window['srslyUsefulFunction'] = function(){
        console.log("You're only running a dummy implementation of srslyUsefulFunction here!");
    };
}