2015-11-02 105 views
1

我试图在TypeScript中构建和发送MouseEvent。 来自mozilla.orgsimulateClick()示例给出了调用构造函数的编译错误:TypeScript中的MouseEvent错误不匹配签名

“提供的参数与调用目标的任何签名都不匹配。”

function simulateClick() { 
    var event = new MouseEvent('click', { 
     'view': window, 
     'bubbles': true, 
     'cancelable': true 
    }); 
    var cb = document.getElementById('checkbox'); 
    var canceled = !cb.dispatchEvent(event); 
    if (canceled) { 
     // A handler called preventDefault. 
     alert("canceled"); 
    } else { 
     // None of the handlers called preventDefault. 
     alert("not canceled"); 
    } 
} 

我曾尝试在参数字典之前插入一个转换<MouseEventInit>,但导致相同的错误。

即使在同一个错误的结果如下:

new MouseEvent('click', <MouseEventInit>null); 

虽然它看起来像它相匹配的原型lib.d.ts

new(typeArg: string, eventInitDict?: MouseEventInit): MouseEvent; 

解决方法:

var event: MouseEvent = new (<any>MouseEvent)('click', 
    { 'view': window, 'bubbles': true, 'cancelable': true }); 

回答

3

似乎编译成功的最早的TypeScript版本是1.5。 下面解决1.4中的问题:

var event: MouseEvent = new (<any>MouseEvent)('click', 
    { 'view': window, 'bubbles': true, 'cancelable': true }); 
+0

不错,任何想法,如果我们可以直接传递null? – 1Mayur

1

您的代码段是正确的。我在playground中试过,即使在我自己的电脑上(都是TypeScript 1.6)。

我建议尝试将它作为独立代码片段首先在您的计算机上进行编译。

+0

谢谢,这让我走上测试各种版本TypeScript的正确轨道。它在<= 1.4中复制。 –

+0

我很高兴你解决了你的问题。 :) –