我有一个非常简单的 Angular 滤镜。

此过滤器接受输入的枚举成员(在此称为XEnum),并返回表示枚举成员的字符串:

module Filters {
    "use strict";

    export function XEnumToStringFilter() {
        return ( input: XEnum ) => {
            return XEnum[input];
        }
    }
}

[...]

module Model {
    export enum XEnum{
        Started = 0,
        Stopped = 1
    }
}

[...]

app.filter( "xEnumToStringFilter", [Filters.XEnumToStringFilter] );

当我在 View 中使用xEnumToStringFilter时,此方法效果很好:
{{0 | etatTransfertEnumToStringFilter}}打印Started{{1 | etatTransfertEnumToStringFilter}}打印Stopped
但是我想在我的服务中使用这个过滤器:
app.service( "serviceUsingXEnum",
        ["xEnumToStringFilter",
            Services.ServiceUsingXEnum] );

但是在我的服务构造函数中,我只会得到一个奇怪的错误:
module Services {
    "use strict";

    export class ServiceUsingXEnum {

        constructor(
            private xEnumToStringFilter: Filters.XEnumToStringFilter // error here
            ) {
            // some beautiful code ...
        }
    }
}



即使我的自动补全功能说它存在!

我想使用依赖注入(inject),我可以做Filters.XEnumToStringFilter()(somethingXEnum),但这很糟糕!

为什么不能将XEnumToStringFilter用作类型?

有什么更好的解决方法?

最佳答案

那是因为您将函数用作类型声明。您要么:

1)更改服务的构造函数声明:
constructor(private xEnumToStringFilter: ( enum: XEnum ) => string )
或者

2)创建一个接口(interface),并在要使用过滤器的地方使用它:

module Filters {
    "use strict";

    export interface IXEnumToStringFunction {
          ( input: XEnum ) => string
    }

    export function XEnumToStringFilter() {
        return ( input: XEnum ) => {
            return XEnum[input];
        }
    }
}

...

然后在构造函数中
constructor(private xEnumToStringFilter: Filters.IXEnumToStringFunction )

09-18 13:57