Правильный способ обработки констант с несколькими возможными значениями в Typescript - PullRequest
1 голос
/ 08 апреля 2020

Мы добавляем некоторые константы в наше приложение для возможных возвращаемых значений для определенных свойств при вызовах API, и я хотел бы найти лучший способ обработки значений, которые могут иметь несколько возможных значений.

Чтобы лучше проиллюстрировать что я имею в виду, рассмотрим код ниже:


export class PlayerNameConstants {
    public static readonly LEBRON = 'Lebron James';
    public static readonly SHAQ = 'Shaq';

    // I know this isn't valid typescript
    public static readonly JORDAN = 'Michael Jordan' | 'MJ';
}

// In some other file
apiCallToReturnValue()
    .then(val => {
        if (val.playerName === PlayerNameConstants.JORDAN) {
            //DO SOMETHING
        }
    })

В вышеприведенном коде, что будет лучшим способом зафиксировать в нашей константе, что JORDAN может быть либо «Michael Jordan», либо «MJ»? Было бы неплохо, если бы я проверял JORDAN, поддерживая ту же сигнатуру вызова, что и другие константы, а не превращая ее в функцию. Есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Вы можете сделать ваши константы массивами, а не строками. Затем проверьте, соответствует ли оно чему-либо в массиве констант. Что-то вроде этого:

export class PlayerNameConstants {
    public static readonly LEBRON = ['Lebron James'];
    public static readonly SHAQ = ['Shaq'];
    public static readonly JORDAN = ['Michael Jordan', 'MJ'];
}

// In some other file
apiCallToReturnValue()
    .then(val => {
        if (PlayerNameConstants.JORDAN.includes(val.playerName)) {
            //DO SOMETHING
        }
})
0 голосов
/ 09 апреля 2020

Другой способ - создать функцию вместо значения const, например,

export class PlayerNames {

    public static IsJordan(name: string): boolean { return name == 'Michael Jordan' || name == 'MJ'};
}

// In some other file
apiCallToReturnValue()
    .then(val => {
        if (PlayerNames.IsJordan(val.playerName)) {
            //DO SOMETHING
        }
    })    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...