因此,在这种情况下,我选择要构建的过滤器对象。筛选器列表存储在数组中:
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中了解有关枚举的更多信息。