我首先要说的是,我使用的是TypeScript2.4,所以我可以使用字符串ENUM,ala
export enum PermissionScope {
BRAND = "brand",
IMAGE_MARKER = "image-marker",
COMPANY = "company",
PRODUCT = "product",
FINANCIALS = "financials"
}
我不知道如何做两件事。
我怎样才能打电话给enum,比如说
class A {
let a : PermissionScope;
}
现在当我尝试通过
实例化这个变量时A.a = PermissionScope.BRAND
我收到错误
Type 'string' is not assignable to type 'PermissionScope'.
这可以通过
来解决A.a = <PermissionScope> PermissionScope.BRAND
但我不确定这是否是正确的解决方案,因为据我所知,潜在的问题是该变量应该是PermissionScope枚举对象类型,而不是PermissionScope的有效枚举值。
如何设置变量类型,使其只能是枚举中的一种类型?
第二个问题是。
如果我想询问字符串是否为有效的枚举值,又名
,该怎么办?var a = "brand"; //true
var b = "candy crush" //false
答案 0 :(得分:1)
对于第一个问题,你要做的不应该是一个问题 你班上的'let'可能会导致你的问题,我把它改为公开,没有问题 我还假设您的A.a示例是A的实例?你的变量'a'是一个实例变量。
class A {
public a : PermissionScope = PermissionScope.BRAND;
}
const instance = new A();
instance.a = PermissionScope.BRAND;
回答你的第二个问题, 枚举被转换为引擎盖下的对象。在原始js中看起来像这样。
var PermissionScope;
(function (PermissionScope) {
PermissionScope["BRAND"] = "brand";
PermissionScope["IMAGE_MARKER"] = "image-marker";
PermissionScope["COMPANY"] = "company";
PermissionScope["PRODUCT"] = "product";
PermissionScope["FINANCIALS"] = "financials";
})(PermissionScope = exports.PermissionScope || (exports.PermissionScope = {}));
因此,您可以使用“in”
查看枚举的静态部分是否有效console.log('BRAND' in PermissionScope); //true
console.log('IMAGE_MARKER' in PermissionScope); //true
console.log('ASDF' in PermissionScope); //false
如果要检查枚举的值部分,则必须遍历对象值并检查
function isValidEnumValue(enumType: any, value: string) {
//NOTE: Object.values is only available in ES7 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values)
return Object.values(enumType).indexOf(value) !== -1;
}
console.log(isValidEnumValue(PermissionScope, 'brand')); //true
console.log(isValidEnumValue(PermissionScope, 'asdf')); //false