58
задан 9 September 2016 в 23:21

1 ответ

В действительно простых случаях, когда просто необходимо возвратить некоторую строку перечислением значений, легче (по моему скромному мнению), использовать некоторую константу для хранения словаря результатов вместо того, чтобы использовать переключатель. Например:

enum Color {
    Red,
    Green,
    Blue
}

function getColorName(c: Color): string {
  const colorNames: Record<Color, string> = {
    [Color.Red]: `I'm red`,
    [Color.Green]: `I'm green`,
    [Color.Blue]: `I'm blue, dabudi dabudai`,   
  }

  return colorNames[c] || ''
}

, Таким образом, здесь необходимо будет упомянуть каждое перечисление значений в константе, иначе Вы получаете ошибку как, например, если Синий отсутствует:

TS2741: 'Синее' Свойство пропускает в типе '{[Цвет. Красный]: строка; [Цвет. Зеленый]: строка'; но требуемый в типе 'Запись'.

Однако это часто - не случай, и затем действительно лучше бросить ошибку точно так же, как предложенный Ryan Cavanaugh.

Также я был немного расстроен при нахождении этого это не будет работать также:

function getColorName(c: Color): string {
    switch(c) {
        case Color.Red:
            return 'red';
        case Color.Green:
            return 'green';
    }
    return '' as never // I had some hope that it rises a type error, but it doesn't :)
}
0
ответ дан 1 November 2019 в 14:23

Другие вопросы по тегам:

Похожие вопросы: