web-dev-qa-db-fra.com

Définir la fonction prototype avec le dactylographié

Lorsque j'essaie de définir une fonction prototype, j'obtiens:

erreur TS2339: la propriété 'applyParams' n'existe pas sur le type 'Function'.

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

Comment résoudre cette erreur?

10
Alexandre

Définissez la méthode sur une interface nommée Function dans un .d.ts fichier. Cela entraînera fusion de déclaration avec le type global Function:

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

Et vous ne voulez pas utiliser de fonction flèche pour que this ne soit pas lié au contexte extérieur. Utilisez une expression de fonction régulière:

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

Maintenant, cela fonctionnera:

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

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