调用TypeScript中构造函数返回的函数

时间:2017-04-10 23:41:22

标签: angularjs typescript

给出以下代码,例如角度过滤器:

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

如果我想在另一个上下文中使用它,通常可以注入$filter引用并执行以下操作:

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

然而,TypeScript编译器抱怨这一点,说$filter(...)没有返回可调用的类型。

如果我想直接使用ToLowerFilter类,我将如何使用TypeScript?这些方法都不起作用:(TypeScript要么生成转换错误,要么它不是正确的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);

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案(尽管可能不是最好的)是首先将$filter强制转换为函数类型,然后调用它:

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

它不漂亮,并且它不使用TypeScript类,但至少它不会产生错误。

我很想听听其他可行的方法。