1

我在使用 TypeScript 并在 Kinectic.Text 上使用 click 事件时遇到错误。

这是我的文字:

var myButton = new Kinetic.Text({
    // set properties here...
});

这是问题代码:

myButton.on('click', function () {
    if (page > 1) {
        renderPage(--page);
        updateButtons();
    }
});

这部分代码带下划线表示:

提供的参数与调用目标的任何签名都不匹配:'() => void' 和 '() => {}' 类型的调用签名不兼容

带下划线的代码是:

function () {
    if (page > 1) {
        renderPage(--page);
        updateButtons();
    }
});

我查看了 .on 的 Kinetic.d.ts:

on(typesStr: string, handler: () =>{ }): void;

我在函数之后放了一个 : void ,例如:

myButton.on('click', function ():  void {
    // same code there
});

但是现在我在 myButton 上遇到了问题。

这个错误是:

Supplied parameters do not match any signature of call target: Call signatures of types '() => void' and '() => {}' are incompatible

是什么导致了这个错误?

4

1 回答 1

1

快速解决:

myButton.on('click', function () {
    if (page > 1) {
        renderPage(--page);
        updateButtons();
    }
    return {}; // Add this line
});

说明: 原因是处理程序签名:

handler: () =>{ }

这与以下函数的签名不兼容(即()=>void

function () {
    if (page > 1) {
        renderPage(--page);
        updateButtons();
    }
}

因为它什么都不返回,并且编译器已经弄清楚了(第一个错误)。正在做:

myButton.on('click', function ():  void {
    // same code there
});

没有任何帮助,因为您正在重申编译器已经推断出的内容(第二个错误)。

返回一个空对象以使签名兼容。正如我在快速修复中所示。

于 2013-05-10T13:22:56.537 回答