Javascript 如何';返回';typescript中的外部函数定义

Javascript 如何';返回';typescript中的外部函数定义,javascript,typescript,userscripts,tampermonkey,Javascript,Typescript,Userscripts,Tampermonkey,我需要在typescript上重写我的脚本 在typescript上重写此javascript的正确方法是什么 if (window.top != window.self ) { return; } 主要目标是在脚本未在window.top中运行时停止执行脚本 Typescript编译器写入错误TS1108:只能在函数体中使用“return”语句。下面是我的操作方法。Typescript可转换为Javascript,但它不是Javascript if(validateIfTop())

我需要在typescript上重写我的脚本

  • 在typescript上重写此javascript的正确方法是什么

    if (window.top != window.self ) {
        return;
    }
    
  • 主要目标是在脚本未在window.top中运行时停止执行脚本


    Typescript编译器写入错误TS1108:只能在函数体中使用“return”语句。

    下面是我的操作方法。Typescript可转换为Javascript,但它不是Javascript

    if(validateIfTop()){
    
        // MAIN BODY OF YOUR USERSCRIPT GOES HERE
    
    }
    
    validateIfTop():boolean{
        return window.top === window.self;
    }
    

    这将修复当前的transpiler错误。但您运行良好的代码可能是当前状态。只是从主脚本返回一个值没有意义。您可能想看看这个问题:它解释了如何停止javascript脚本。

    您不能在函数外部返回,但使用throw Exception也可以停止执行userscipts(tampermonkey):


    我怀疑您的原始JS功能只是偶然的,即它在运行时无声地失败:


    正如David已经建议的那样,我将重构代码,使其被
    if
    块包围。

    我们这里缺少一些代码,但是您的代码是否可以包装在类或函数中。这段代码在所有类和函数之外的javascript上工作——它停止脚本的执行,就像我在示例中说的“return”——停止userscript。您的示例-但感谢停止JavaScript执行的链接,我重写了脚本并抛出了异常。在这个答案中有一个逻辑反转,但该方法对于GM/TM/User脚本是正确的。不!不要为标准的操作程序抛出错误。除了会导致将来的头痛,这还会(非常轻微地)不必要地降低浏览器性能。如David Laberge(已编辑)的回答所示,将用户脚本的整个主要部分用
    if()
    包装起来。我不能像David show那样使用反向逻辑,因为在返回后声明一些模块。并且模块声明不能进入if。不,它不会失败。OP的代码在用户脚本中完全有效。他只是想用Typescript对它进行预处理——它给出了指定的错误。
    if (window.top != window.self) {
        throw new Error("Not on top");
    }