Русский
Русский
English
Статистика
Реклама

Декларативная работа с перечисляемыми типами через Record как не городить switch или вложенные if

Практически в любом проекте есть некая жесткая структура данных с перечислением (а чаще всего не одна), на которую нужно навешивать некие расширения: иконки в зависимости от типа или статуса некой сущности, логика поведения итд. Рассмотрим как это делают новички, и как можно делать красиво, используя служебный класс Record


В императивном подходе чаще всего используют "любимые" всеми switch или каскады из if:


  export type CarBodyType  = 'sedan' | 'universal' | 'minivan'...getCarBodyIcon(bodyType: CarBodyType): IconName {  if (bodyType === 'sedan') return 'SEDAN_BODY'  if (bodyType === 'universal') return 'UNIVERSAL_BODY'  if (bodyType === 'minivan') return 'MINIVAN_BODY'}getCarBodyName(bodyType: CarBodyType) {   switch (bodyType: CarBodyType) {       case 'sedan': return 'Седан';       case 'universal': return 'Универсал';       case 'minivan': return 'Минивэн';    }}

То же самое в декларативном стиле:


export type TCarBody  = 'sedan' | 'universal' | 'minivan'export interface ICarViewExtension { name: string, icon: IconName }export const CAR_BODY_VIEW_RECORD: Record<TCarBody, ICarViewExtension> {    sedan: { name: 'Седан', icon: 'SEDAN_BODY'},    universal: { name: 'Универсал', icon: 'UNIVERSAL_BODY'},    minivan: { name: 'Минивэн', icon: 'MINIVAN_BODY'},}...getCarBodyIcon(bodyType: TCarBody): IconName {  return CAR_BODY_VIEW_RECORD[bodyType].icon;}getCarBodyName(bodyType: TCarBody) {   return CAR_BODY_VIEW_RECORD[bodyType].name;}

Само собой, функции getCarBodyIcon и getCarBodyName тут для упрощения, лучше пользоваться пайпами.
Что мы получаем от использования рекордов?


  1. WebStorm будет сразу давать подсказки, если мы, например, добавили новый тип кузова в TCarBody и забыли его прописать в рекорд. С if и switch такого не будет.
  2. Код получается более читаемый, да и собственно кода получается меньше
  3. Если вдруг захочется сделать типы кузова настраиваемыми на сервере где-нибудь в админке, и хронить иконки, названия, итд в базе данных, потребуется гораздо меньше правок. Так как логика гибкая, а источник истины один, и он в виде структуры данных, которую можно передать в json и распарсить.

Как всегда жду мнение сообщества и приветствую конструктивную критику.

Источник: habr.com
К списку статей
Опубликовано: 19.12.2020 14:20:36
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Angular

Typescript

Архитектура

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru