因此,在这种情况下,我选择要构建的过滤器对象。筛选器列表存储在数组中:

app.constant("filters", () => <IFilterList>[
    (value, label) => <IFilterObject>{ value: value, label: label }
]);

interface IFilterList {
    [index:number]: (value?:string, label?:string) => IFilterObject
}

interface IFilterObject {
   value: string,
   label: string
}


这允许设置所用过滤器的模块:

// somemodule.js

app.controller("SomeController", (filters, filterService) => {
    var filter = filters[0]("this value", "this label");

    filterService.change(filter);
});


如您所见,至少可以说用魔术数字进行filters[0]效果很差。

在C#中,我将创建一个公共的静态类,因此可以在任何地方使用。就像是:

public static class FilterNames
{
    public const int NameFilter = 0;
}


您将如何使用CommonJs模块系统在AngularJs和TypeScript中做同样的事情?

在我看来,您将需要全局变量……这真的是最好的方法吗?

最佳答案

您可以使用值进行枚举。

enum FilterType {
  NAME,
  AGE
}




默认情况下,Enum会获取数字值,因此第一个获取值0,第二个获取值1,依此类推。

您可以像这样使用它:

filters[FilterType.NAME]("this value", "this label");


枚举可以在另一个文件中,您可以将其导入到要使用它的任何位置。您可以在TypeScript here中了解有关枚举的更多信息。

09-10 12:15
查看更多