【问题标题】:How to 'return' outside function definition in typescript如何在打字稿中“返回”外部函数定义
【发布时间】:2015-03-02 13:37:37
【问题描述】:
  1. 我需要在 typescript 上重写我的 Tampermonkey 脚本。

  2. 在打字稿上重写这个javascript的正确方法是什么?

    if (window.top != window.self ) {
        return;
    }
    

如果脚本不在 window.top 中运行,主要目标是停止执行脚本。

Typescript 编译器写入 ERROR TS1108: A 'return' statement can only be used in a function body.

【问题讨论】:

  • 我们在这里遗漏了一些代码,但您的代码可以包装在类或函数中吗?可以从主执行中调用该函数。
  • 这段代码适用于所有类和函数之外的 javascript - 它停止执行脚本,看起来像:jsfiddle.net/4tfjvvxk

标签: javascript typescript userscripts tampermonkey


【解决方案1】:

我会这样做。 Typescript 转译成 Javascript,但它不是 Javascript。

if(validateIfTop()){

    // MAIN BODY OF YOUR USERSCRIPT GOES HERE

}

validateIfTop():boolean{
    return window.top === window.self;
}

这应该可以修复当前的转译器错误。但是您运行良好的代码可能是当前状态。只是从主脚本中返回一个值是没有意义的。您可能想看看这个问题:Is it possible to stop JavaScript execution? 它解释了如何停止 javascript 脚本。

【讨论】:

  • 正如我在示例中所说的“返回” - 停止用户脚本。你的例子 - 不是
  • 但是感谢停止 JavaScript 执行的链接,我重写了抛出异常的脚本。
  • 此答案存在逻辑反转,但该方法对于 GM/TM/User 脚本是正确的。
【解决方案2】:

我怀疑你原来的 JS 功能只是偶然的,即它在运行时默默地失败:

我会按照 David 的建议将代码重构为由 if 块包围。

【讨论】:

  • 不,它不会失败。 OP 的代码在用户脚本中 完全有效。他只是想用 Typescript 对其进行预处理——它给出了指示的错误。
【解决方案3】:

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

if (window.top != window.self) {
    throw new Error("Not on top");
}

【讨论】:

  • 不!不要为标准 OP 程序的内容抛出错误。除了引起未来的挠头之外,这还会(非常轻微地)不必要地降低浏览器性能。正如 David Laberge 在他的(已编辑)答案中所示,将用户脚本的整个主要部分包装在 if() 中。
  • 我不能像大卫展示的那样使用逆逻辑,因为在返回后声明了一些模块。并且模块声明不能进入 if。
猜你喜欢
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 2022-09-24
  • 2018-12-27
  • 1970-01-01
  • 2022-01-12
  • 2021-12-23
  • 2019-09-08
相关资源
最近更新 更多