Разбор перечисления из строки и значения в машинописи - PullRequest
0 голосов
/ 04 января 2019

У меня есть базовое перечисление errorCode, например

export enum SomeErrorCodes {
    none = 0,
    notFound = 1,
    duplicated = 2
}

Я получаю из webAPI имя перечисления в виде строки "SomeErrorCodes" и числа, скажем, 1. Как я могу разобрать их в SomeErrorCodes.notFound в машинописном тексте?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Ваше перечисление будет перенесено в

Object
0: "none"
1: "notFound"
2: "duplicated"
duplicated: 2
none: 0
notFound: 1

Таким образом, вы можете легко получить значение по ключу,

function getErrorCode(code: number): string {
  return SomeErrorCodes[code] || 'Code not exist';
}
0 голосов
/ 04 января 2019

Вы можете использовать Object.keys для получения имени ключа, а затем использовать его для получения соответствующего перечисления. Это будет работать на https://www.typescriptlang.org/play/index.html и должно дать вам достаточно, чтобы сделать это:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...