Избегайте повторения вызовов методов в конструкции массива TypeScript - PullRequest
0 голосов
/ 21 марта 2019

У меня есть перечисление TypeScript с сотнями значений, таких как

export enum ObjectTypes {
    OBJ_TYPE_1 = 1,
    OBJ_TYPE_2 = 2,
    OBJ_TYPE_3 = 3,
    OBJ_TYPE_4 = 4,
    OBJ_TYPE_5 = 5,
    OBJ_TYPE_5 = 6,
    ...
    OBJ_TYPE_500 = 500,
}

Несколько мест в массивах приложения создают, например,

private static ALLOWED_OBJ_TYPES: string[] = [
    ObjectTypes.OBJ_TYPE_1.toString(),
    ObjectTypes.OBJ_TYPE_3.toString(),
    ObjectTypes.OBJ_TYPE_6.toString(),
...
];

Есть ли более короткий, более элегантный способобъявите эти массивы, избегая повторения ObjectTypes. и .toString()?

Обратите внимание, что набор значений перечисления для каждого массива изменяется произвольно.

1 Ответ

2 голосов
/ 21 марта 2019

Это позволит избежать нескольких нажатий клавиш, и все еще будет безопасным, если вы не уверены, будет ли оно более элегантным, но красота в глазах смотрящего:)

export enum ObjectTypes {
    OBJ_TYPE_1 = 1,
    OBJ_TYPE_2 = 2,
    OBJ_TYPE_3 = 3,
    OBJ_TYPE_4 = 4,
    OBJ_TYPE_5 = 5,
    OBJ_TYPE_5 = 6,
    OBJ_TYPE_500 = 500,
}

function createEnumArray<T>(e: T, ...keys: Array<keyof T>) {
    return keys.map(k => e[k].toString())
}

let ALLOWED_OBJ_TYPES: string[] = createEnumArray(ObjectTypes, 
    "OBJ_TYPE_1",
    "OBJ_TYPE_3",
    "OBJ_TYPE_6",
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...