在Typescript中使用超出范围的函数

时间:2013-01-02 08:25:09

标签: javascript typescript

我认为这已经在某个地方得到解决,在某些时候,只是为了我的生活,我不记得了,所以这是我的问题:

我正在做一些将加载到现有应用程序中的javascript工作。这个应用程序有可用的功能,除了我想要实际使用的一些功能之外,我几乎不知道它的任何功能。所以,我想知道一个事实,即window.srslyUsefulFunction将可供我使用,我并不关心将其移植到打字稿定义中。

所以问题是如何在我自己的打字稿文件中使用window.srslyUsefulFunction而不为其创建定义?

示例:

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

3 个答案:

答案 0 :(得分:14)

您可以将该函数添加到Window界面,然后在TypeScript程序中使用它:

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

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

答案 1 :(得分:5)

我有简单的解决方法。

在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函数,只需使用window [“foo”]。call();

答案 2 :(得分:1)

检查功能是否存在。如果没有,请声明:

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