В действительно простых случаях, когда просто необходимо возвратить некоторую строку перечислением значений, легче (по моему скромному мнению), использовать некоторую константу для хранения словаря результатов вместо того, чтобы использовать переключатель. Например:
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 :)
}