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

Ale*_*exR 14 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

Fen*_*ton 15

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

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

class MyClass {
    doSomething() {
        window.srslyUsefulFunction(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以在TypeScript文件中使用常规JavaScript,但如果它扩展了已在TypeScript中定义的内容,则不会,即窗口已被声明为Window接口的实现.如果你使用带有`window`的函数 - 也就是从全局范围中拉出它,你可以使用`declare srslyUsefulFunction:(id:number):void;`甚至是松散且简单的`declare srslyUsefulFunction:any;` (4认同)
  • 这对TS初学者非常有用. (2认同)

小智 5

我有简单的解决方法.

在index.html中

function playIntro() {
        intro = new lib.intro();
        onlinePlayer.contentContainer.addChild(intro);
        stage.update();
    }
Run Code Online (Sandbox Code Playgroud)

在我的Main.ts我称之为:

private onClick(event): void {

        if (window.hasOwnProperty('playIntro')) {
            window['playIntro'].call();
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以...如果你想从全局范围调用"blind"js函数,只需使用window ["foo"].call();