1

TypeScript でエラーが発生し、Kinectic.Text でクリック イベントを使用しています。

これが私のテキストです:

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 の Kinectic.d.ts を調べました。

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

次のような関数の後に : void を置きます。

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

しかし今、私は on 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
});

コンパイラがすでに推論したことを繰り返しているため(2番目のエラー)、まったく役に立ちません。

空のオブジェクトを返して、署名に互換性を持たせます。クイックフィックスで示したように。

于 2013-05-10T13:22:56.537 に答える