Javascript 如何';返回';typescript中的外部函数定义
我需要在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())
if (window.top != window.self ) {
return;
}
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");
}