打字AngularJs CommonJs常量

Typescript AngularJs CommonJs Constants

本文关键字:常量 CommonJs AngularJs 打字      更新时间:2023-09-26

所以我有这样的场景,我选择了一个要构建的过滤器对象。过滤器列表存储在一个数组中:

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;
}

如何在AngularJs和TypeScript中使用CommonJs模块系统进行同样的操作?

在我看来,你需要全局变量。。。真的是最好的方法吗?

您可以使用这些值生成一个枚举。

enum FilterType {
  NAME, 
  AGE
}

默认情况下,枚举获得数值,因此第一个枚举获得数值0,第二个枚举获得值1,等等。

你可以这样使用它:

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

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