从typescript中的字符串和值解析枚举
我有一个基本的错误代码枚举,例如从typescript中的字符串和值解析枚举,typescript,enums,Typescript,Enums,我有一个基本的错误代码枚举,例如 export enum SomeErrorCodes { none = 0, notFound = 1, duplicated = 2 } 我从一个webAPI收到枚举名,它是一个字符串“SomeErrorCodes”和一个数字,比如说1。如何在typescript中将它们解析为SomeErrorCodes.notFound 谢谢您可以使用Object.keys获取密钥名称,然后使用该名称获取相应的枚举。这将运行在,并且应该给您足够的时
export enum SomeErrorCodes {
none = 0,
notFound = 1,
duplicated = 2
}
我从一个webAPI收到枚举名,它是一个字符串“SomeErrorCodes”和一个数字,比如说1。如何在typescript中将它们解析为SomeErrorCodes.notFound
谢谢您可以使用Object.keys获取密钥名称,然后使用该名称获取相应的枚举。这将运行在,并且应该给您足够的时间来完成:
enum Fruits {
Apple = 1,
Orange
}
enum Vegetables {
Carrot = 75,
Lettuce = 88,
Asparagus = 96
}
class ThingParser {
public GetArbitraryValues(fromObject: any): string[] {
const fancyStrings: string[] = [];
const key = Object.keys(fromObject)[0];
let getStringMethod: (theValue: number) => string;
switch (key) {
case "Fruits":
getStringMethod = (fruit: number) => {
return Fruits[fruit];
}
break;
case "Vegetables":
getStringMethod = (veg: number) => {
return Vegetables[veg];
}
break;
default:
throw "Unknown enum...";
}
const intValues = (<string>fromObject[key]).split(",")
.map(x => Number.parseInt(x.trim()));
for (const intVal of intValues) {
fancyStrings.push(getStringMethod(intVal));
}
return fancyStrings;
}
}
const parser = new ThingParser();
let fruits = document.createElement('h2');
fruits.textContent = parser.GetArbitraryValues({ "Fruits": "1,2" }).join(", ");
document.body.appendChild(fruits);
let veggies = document.createElement('h2');
veggies.textContent = parser.GetArbitraryValues({ "Vegetables": "88" }).join(", ");
document.body.appendChild(veggies);
枚举水果{
苹果=1,
橙色
}
列举蔬菜{
胡萝卜=75,
生菜=88,
芦笋=96
}
类内容分析器{
public GetArbitraryValues(fromObject:any):字符串[]{
常量fancyStrings:字符串[]=[];
const key=Object.keys(fromObject)[0];
让getStringMethod:(值:number)=>string;
开关(钥匙){
“水果”一案:
getStringMethod=(水果:编号)=>{
归还水果[水果];
}
打破
案例“蔬菜”:
getStringMethod=(veg:number)=>{
归还蔬菜[蔬菜];
}
打破
违约:
抛出“未知枚举…”;
}
常量intValues=(fromObject[key]).split(“,”)
.map(x=>Number.parseInt(x.trim());
for(intValues的常量intVal){
push(getStringMethod(intVal));
}
返回范奇斯特林;
}
}
const parser=new ThingParser();
设fruits=document.createElement('h2');
fruits.textContent=parser.getArbitrayValues({“fruits”:“1,2”});
文件.正文.附件(水果);
让veggies=document.createElement('h2');
vegies.textContent=parser.getArbitrayValues({“蔬菜”:“88”});
文件.身体.附件(蔬菜);
您的枚举将被传输到
Object
0: "none"
1: "notFound"
2: "duplicated"
duplicated: 2
none: 0
notFound: 1
因此,您可以通过键轻松获取值
function getErrorCode(code: number): string {
return SomeErrorCodes[code] || 'Code not exist';
}
您可能需要包含更多关于服务器响应的详细信息。“SomeErrorCodes”和一个数字不是很清楚。这个物体看起来像什么?是{“SomeErrorCodes”:1}我的API正在发送一个keyvaluepair,所以这将是{“SomeErrorCodes”,1}。我有几个错误枚举,所以我想去掉它的名称,这样我可以做一些错误代码[1]这些错误的最终用例是什么?听起来您可能实际上并不想要枚举本身,而是想要一个表示错误的字符串。如果您要解析的值可以是几种枚举类型中的一种,那么解析后的值将是任何类型,对吗?用例是获取错误的匹配转换。至于想要字符串而不是枚举,这在一定程度上是正确的。我的枚举有标志(为了使我的问题简单,没有声明),因此一个值实际上可能嵌入了几个错误。我已经有了可以提取这些错误的方法,但是我需要枚举;我想它现在应该对你有用了。问题是我有几个错误枚举,不知道从服务器来的枚举是什么。服务器正在发送一个KeyValuePair,其中enum的名称为字符串,值为int,例如{“SomeErrorCodes”,1}。问题是我有几个错误enum,并且不知道来自服务器的enum是什么。服务器正在发送一个KeyValuePair,其中enum的名称为字符串,值为int,例如{“SomeErrorCodes”,1}。如果我收到对象,那就太好了。枚举水果{苹果=1,橘子=2}枚举蔬菜{胡萝卜=1,生菜=2,芦笋=3}我收到的将是{“水果”,2}这是正确的。这是一个JSON对象。“水果”是第一个对象键。对象。键(x)[0];我会拿到第一把钥匙。将整个对象{“Fruits”,2}传递到该方法中以获取密钥名。