在界面中使用枚举的打字稿

时间:2018-04-13 14:32:42

标签: typescript enums interface

我是Typescript的新手,我不确定语法。我尝试在线搜索,但没有找到任何帮助。

这些是我的界面和枚举定义。

interface Products {
    asian: {[key: string]: string};
    american: {[key: string]: string};
}

enum State {
   NEWYORK = 'nyc',
   BOSTON = 'boston'
}

interface Branch {
   nyc: {
     products: Products;
   };
   boston: {
      products: Products;
   };
}

我不确定如何在State界面内使用枚举Branch。这样我就可以使用STATE.NEWYORKSTATE.BOSTON枚举。 像这样:

interface Branch {
   State.NEWYORK: {
     products: Products;
   };
   STATE.BOSTON: {
      products: Products;
   };
}

感谢阅读。

2 个答案:

答案 0 :(得分:3)

您可以使用计算属性的语法:

interface Branch {
   [State.NEWYORK]: {
     products: Products;
   };
   [State.BOSTON]: {
      products: Products;
   };
}

请注意,即使您使用enum值,索引器仍然是字符串,并且使用enum的值o。所以这些都是有效的:

let f!: Branch;
f[State.NEWYORK]
f["nyc"]
f.nyc

Demo

答案 1 :(得分:0)

通用且不需要维护的解决方案:

enum ApiResponseCode {
    SUCCESS = 1,
    FAIL = 2,
    FILE_MODIFIED = 3
};

interface View {
    Enums: {
        ApiResponseCode: {
            [P in keyof typeof ApiResponseCode]: ApiResponseCode;
        }
    }
};