2017-04-10 116 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类,但至少不会产生错误。

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