Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从typescript中的字符串和值解析枚举_Typescript_Enums - Fatal编程技术网

从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}传递到该方法中以获取密钥名。