在JavaScript中没有标准类型的枚举,我转向Flow文档并找到了$ Keys类型,但文档没有描述如何在" enum"中找到特定项目。名单。例如:
const types = {
T_HANDLE: 1,
T_COMPUTED: 2,
T_MATERIAL: 3
};
export type TYPE = $Keys<typeof types>;
class MyClass {
type: TYPE;
constructor() {
this.type = 'T_HANDLE';
}
}
let myObject = new MyClass();
if(myObject.type === TYPE.T_HANDLE){ //Flow: TYPE. type referenced from value position type TYPE
// some
}
或者是否有其他方法来实现枚举列表?
答案 0 :(得分:1)
在您的示例中,TYPE
是表示枚举选项的Flow类型。它不会在运行时可用,所以Flow是正确的,以防止你这样使用它。
相反,您可以直接使用枚举键:
if(myObject.type === ('T_HANDLE': TYPE)){
..
}
此处,('T_HANDLE': TYPE)
部分会检查您是否错误输入了枚举名称。
另请注意,如果您只使用字符串文字作为&#34;枚举&#34;像这样,你根本不需要types
容器来获取值。这也可行:
export type TYPE = 'T_HANDLE' | 'T_COMPUTED' | 'T_MATERIAL';
class MyClass {
type: TYPE;
constructor() {
this.type = 'T_HANDLE';
}
}
let myObject = new MyClass();
if(myObject.type === ('T_HANDLE': TYPE)){
..
}
答案 1 :(得分:-1)
我通常会编写自己的Enum类:
class Enum {
constructor(keys, start = 0) {
return keys.reduce((obj, k) => ((obj[k] = start++), obj), {});
}
}
console.log(new Enum(['GET', 'POST', 'DELETE'], 1));
输出:{ GET: 1, POST: 2, DELETE: 3 }