【问题标题】:Typescript Postmessage fails with one argument, and twoTypescript Postmessage 失败,有一个参数,两个
【发布时间】:2021-06-15 20:06:05
【问题描述】:

有 Typescript 项目。

此时:postMessage(result);

我明白了..

Expected 2-3 arguments, but got 1.预期有 2-3 个参数,但得到了 1 个。

此时:postMessage(result, '*');

我明白了..

Uncaught TypeError: Failed to execute 'postMessage' on 'DedicatedWorkerGlobalScope': Overload resolution failed.
    at runParser

Typescript 在这里想要什么?是一两个论据吗?为什么这会导致问题?

【问题讨论】:

  • 那么第一个显然是错误的,因为它需要 2 或 3 个参数。请参阅developer.mozilla.org/en-US/docs/Web/API/Window/postMessage 的文档。第二个应该是window.postMessage,其中window 是您要发布到的窗口。
  • 这个错误发生在worker作用域,而不是Window作用域
  • 对,对不起。这绝对很奇怪,因为在这种情况下允许 1 个值。我发现了一个类似的问题可能会有所帮助。 stackoverflow.com/questions/47299899/….
  • 哦,尝试在编辑器中导航到postMessage(例如,在 VSCode 中按 ctrl-click)。我敢打赌它指向的是窗口对象的版本,而不是工作者版本。我敢打赌,这就是它抱怨的原因。尝试更明确(我认为语法是self.postMessage(result))。

标签: typescript


【解决方案1】:

如果你使用MessageChannel的端口postMessage函数,那么你只需要传递一个参数。

event.ports[0].postMessage(data)

如果你使用的是window.postMessage,那么你必须传递2或3个参数。

window.postMessage(data, origin, [transfer])

【讨论】:

    【解决方案2】:

    您将不得不将 webworker 添加到您的 tsconfig.json 或为您的工作人员创建一个单独的 TS 项目,因为 postMessage 在 worker 和 @987654322 中具有不同的 API @ 环境。

    "compilerOptions" : {
        "lib": [
            "webworker"
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-23
    • 2013-12-26
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2019-06-17
    相关资源
    最近更新 更多