2017-04-10 105 views
0

給定以下代碼,例如一個角度濾波器:在TypeScript中調用構造函數返回的函數

class ToLowerFilter 
{ 
    constructor() 
    { 
     return (value: string) => value.toLowerCase(); 
    } 
} 
myAngularApp.filter("toLower", ToLowerFilter); 

如果我想在另一個上下文中使用此,通常你可以注入$filter參考,並做一些事情,如:

var filteredValue = $filter('toLower')(myValueToBeLowered); 

然而,打字稿編譯器抱怨這個,說$filter(...)不返回可調用類型。

如果我想直接使用ToLowerFilter類,那麼如何使用TypeScript來做到這一點?這些方法都不奏效:(打字稿要麼生成transpile錯誤,或者它不是正確的JavaScript語法)

// define $filter: ng.IFilterService 
var filteredValue = $filter('toLower')(value);  

var filter = new ToLowerFilter(); 
var filteredValue = filter(value); 

var filteredValue = new ToLowerFilter(value); 

var filteredValue = new ToLowerFilter()(value); 
+0

爲什麼不讓ToLowerFilter函數返回一個函數? –

回答

0

一個可能的解決方案(雖然也許不是最好的)是首先將$filter轉換爲功能型,然後調用它:

var filterFunction = $filter('toLowerFilter') as (value: string) => string; 
var filteredValue = filterFunction(myValue); 

這並不漂亮,它不使用TypeScript類,但至少不會產生錯誤。

我很想聽聽其他可能的做法。