【问题标题】:Overloaded Declaration Causes Build Error重载声明导致构建错误
【发布时间】:2014-06-28 21:20:34
【问题描述】:

我为 postMessage 提供了重载声明来表示仅消息签名(而不是 lib.d.ts 三参数版本)。

declare function postMessage(message: any): void;

我没有看到任何视觉错误、红色曲线等,但我确实遇到了构建错误。

构建:提供的参数与调用目标的任何签名都不匹配。

构建:无法为“调用”表达式选择重载。

在这一行:

postMessage(message);

这是选择我提供的重载时的错误还是我在做一些愚蠢的事情?

【问题讨论】:

    标签: typescript tsc


    【解决方案1】:

    对于编译器来说,这似乎是一份有效的错误报告。以下工作正常:

    declare function foo(message: any, targetOrigin: string, ports?: any): void;
    declare function foo(message: any): void;
    
    foo('asdf');
    

    但是下面的编译会报错

    declare function postMessage(message: any): void;
    postMessage('asdf');
    

    lib.d.ts 根目录下的其他函数也一样,例如:

    declare function blur(message: any): void;
    blur('asdf');
    

    就好像declare 甚至没有被解析。以下给出了相同的错误:

    postMessage('asdf');
    

    瞬间解决

    使用no-default-lib 引用标签:

    /// <reference no-default-lib="true"/>
    declare function postMessage(message: any): void;
    postMessage('asdf');
    

    【讨论】:

    • 酷 - 我已将其作为错误提出:typescript.codeplex.com/workitem/2588 - 我还尝试将其添加到 Window 界面。那里也没有欢乐。所有作品都在 Playground 中运行,所以也许它已经为下一个版本修复了。
    • 我相信错误也可能在操场上......语言服务在 VS 中也可以(这是操场正在使用的)+ js 也由tsc 生成...... . 这是游乐场在 RHS 上显示的内容
    【解决方案2】:

    临时解决办法...

    这是工人的临时工作......

    (function(self: Worker){
    
        self.postMessage('a');
    
        self.postMessage({ etc: 'a' });
    
    }(<any>self));
    

    不理想,但它可以工作,因为Worker 接口在self 上下文而不是window 上下文中具有postMessage 的正确定义。

    【讨论】:

      猜你喜欢
      • 2012-12-23
      • 2012-11-09
      • 1970-01-01
      • 2021-10-04
      • 2011-12-27
      • 1970-01-01
      • 2011-05-31
      • 2011-02-28
      • 1970-01-01
      相关资源
      最近更新 更多