2016-03-29 6 views
0

Ich möchte einen meiner Winkelfilter als Funktion in meinem Controller verwenden. Ich fand die Antwort hier: How to use a filter in a controlerTypescript und Winkelfilter

In der Tat habe ich die letzte Antwort verwendet, da es genau das zur Verfügung stellte, was ich brauchte. Mein JS sieht so aus:

var MyFunc = $filter('MyGreatFilter'); 
    var resp = MyFunc(6); 

Und es funktioniert gut. Allerdings verwende ich Typoskript und ich kann nicht herausfinden, wie man es den richtigen Typ gibt. Offensichtlich ohne jede Art bekomme ich den Fehler:

error TS2349: Cannot evoke an expression whose type lacks a call signature 

Wenn ich diese Art meiner Controller-Schnittstelle hinzufügen:

MyFunc(val:number): string; 

ich einen Fehler Ich verstehe nicht:

error TS2322: Type {} is not assignable to type '(val: number) => string' 

Die Funktion nimmt eine Zahl als Parameter und gibt eine Zeichenfolge zurück. Irgendwelche Ideen zum Eingeben der Filterfunktion MyFunc?

Danke.

+0

MyFunc: Funktion? – YOU

Antwort

0

Ich fand die Antwort in einem anderen Teil des Codes, an dem ich arbeite, dass jemand anderes (viel klüger als ich) schrieb. Sie benötigen ein Typoskript Schnittstelle über dem Filter hinzuzufügen:

interface IFilterMyGreatFilterName { 
(value: number): string; 
} 

function MyGreatFilter() { 
    return function (item:number) { 
     // Filter stuff and return a string 
    }; 
} 

Und dann auf eine etwas andere Art und Weise die Funktion aufrufen, als ich oben zeigte:

var resp = $filter<IFilterMyGreatFilterName>('MyGreatFilter')(aNumValue);