2017-01-20 7 views
2

Wenn ich versuche, einen Prototyp-Funktion zu definieren, die ich erhalten:definieren Prototypfunktion mit Typoskript

Fehler TS2339: Eigenschaft ‚applyParams‘ existiert nicht auf Typ ‚Funktion‘.

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

Wie um diesen Fehler zu lösen?

+0

Try this: http://stackoverflow.com/a/28020863/1142380 Ich glaube nicht, benötigen Sie den "' prototype. "Teil – ToastyMallows

+0

@ToastyMallows, aber dann bekomme ich Fehler TS2339: Eigenschaft 'applyParams' existiert nicht auf den Typ 'FunctionConstructor'. Selbst mit der Schnittstelle FunctionConstructor { applyParams (params: any): any; } – Alexandre

Antwort

4

definieren es auf die Funktion Schnittstelle:

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

Und Sie wollen nicht einen Pfeil Funktion verwenden, so dass this nicht nach außen Kontext gebunden. Verwenden Sie eine reguläre Funktion Ausdruck:

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

Jetzt wird diese Arbeit:

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

function myOtherFunction() { 
    console.log(arguments); 
} 
myOtherFunction.applyParams([1, 2, 3]); 
+0

Ich habe auch versucht, eine Schnittstelle zu verwenden, und es wird immer noch der Fehler angezeigt. Ich habe versucht, Schnittstelle Funktion und Schnittstelle FunctionConstructor – Alexandre

+0

@Alexandre verwenden Sie externe Module? Definieren Sie die Schnittstelle in einer Definitionsdatei (* .d.ts * Datei) und geben Sie an, dass in Ihrer Anwendung –

+1

@Alexandre das funktioniert [hier] (https://www.typescriptlang.org/play/#src=interface % 20Funktion% 20% 7B% 0D% 0A% 20% 20% 20% 20AnwendungenParameter (% 3A% 20%)% 3A% 20Void% 3B% 0D% 0A% 7D% 0D% 0A% 0D% 0AFunktion.prototyp.applyParams% 20% 3D% 20Funktion% 20 (% 3A% 20%)% 20% 7B% 0D% 0A% 20% 20% 20% 20% (%)% 3B% 0D% 0A% 7D% 3B% 0D% 0A % 0D% 0Aconst% 20func% 20% 3D% 20Funktion% 20()% 20% 7B% 20console.log (Argumente)% 3B% 20% 7D% 3B% 0D% 0Affunktion% 20myOtherFunc()% 20% 7B% 0D% 0A% 20% 20% 20% 20console.log (Argumente)% 3B% 0D% 0A% 7D% 0D% 0A% 0D% 0Afunc.applyParams (% 5B1% 2C% 202% 2C% 203% 5D)% 3B% 0D % 0AmyOtherFunc.applyParams (% 5B1% 2C% 202% 2C% 203% 5D)% 3B) –