web-dev-qa-db-ja.com

タイプスクリプトでプロトタイプ関数を定義する

プロトタイプ関数を定義しようとすると、次のようになります。

エラーTS2339:プロパティ「applyParams」はタイプ「Function」に存在しません。

Function.prototype.applyParams = (params: any) => {
     this.apply(this, params);
}

このエラーを解決する方法は?

10
Alexandre

.d.tsファイルのFunctionという名前のインターフェイスでメソッドを定義します。これにより、グローバルFunctionタイプで 宣言マージ が発生します。

interface Function {
    applyParams(params: any): void;
}

また、thisが外部コンテキストにバインドされないように、矢印関数を使用したくありません。正規関数式を使用します。

Function.prototype.applyParams = function(params: any) {
    this.apply(this, params);
};

これでうまくいきます:

const myFunction = function () { console.log(arguments); };
myFunction.applyParams([1, 2, 3]);

function myOtherFunction() {
    console.log(arguments);
}
myOtherFunction.applyParams([1, 2, 3]);
19
David Sherret