Как я могу использовать постоянное значение в качестве литерала типа потока?

1

Я пытаюсь использовать FlowType в первый раз, и у меня возникают проблемы с назначением постоянных значений как литералов типов. Как изменить следующее, чтобы предотвратить использование тех же строковых значений как в определении констант, так и в объявлении типа?

// @flow
export const INITIAL = 'INITIAL'
export const LOADING = 'LOADING'
export const LOADED = 'LOADED'
export const FAILED = 'FAILED'

export type State = 'INITIAL' | 'LOADING' | 'LOADED' | 'FAILED'
Теги:
flowtype

1 ответ

1
Лучший ответ

Короткий ответ: вы не можете (AFAIK)

Долгий ответ: вы должны реструктурировать свою программу, чтобы избавиться от этих констант. Если вы посмотрите на преимущества этих констант (т.е. Какова точка констант в редукции?)

  • Это помогает сохранить именование согласованным, потому что все типы действий собраны в одном месте.

  • Иногда перед началом работы над новой функцией вы хотите увидеть все существующие действия. Возможно, что действие, в котором вы нуждаетесь, уже было добавлено кем-то из команды, но вы этого не знали.

  • Список типов действий, которые были добавлены, удалены и изменены в запросе Pull, помогает всем в команде отслеживать объем и реализацию новых функций.

  • Если вы делаете опечатку при импорте константы действия, вы получите неопределенное значение. Это гораздо легче заметить, чем опечатка, когда вы задаетесь вопросом, почему ничего не происходит, когда действие отправляется.

всевозможные вещи могут быть достигнуты с вариантом варианта.

Если вы используете redux, вы можете увидеть, как они устраняют константы, используя поток в документах об использовании сокращения с потоком:

// @flow

type State = { +value: boolean };

type FooAction = { type: "FOO", foo: boolean };
type BarAction = { type: "BAR", bar: boolean };

type Action = FooAction | BarAction;

function reducer(state: State, action: Action): State {
  switch (action.type) {
    case "FOO": return { ...state, value: action.foo };
    case "BAR": return { ...state, value: action.bar };
    default:
      (action: empty);
      return state;
  }
}

который не только гарантирует, что вы не делаете опечатки, а что нет, но (действие: пусто) в конце гарантирует, что вы будете обрабатывать все случаи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню