Имеется ли смысл в том, что вводит тип в функцию в ReasonML: соглашение о стилях или синтаксический сахар?

Я пытаюсь выучить ReasonML и наткнуться на эту строчку в источнике Reason React Hacker News (src/CommentList.re):

type action =
  | Toggle(option(string));

где следующее вхождение action в качестве параметра в функции reducer:

reducer: (action, state) =>
  switch action {
  | Toggle(commentId) =>
    ReasonReact.Update({
      collapsed_comments: toggleComment(state.collapsed_comments, commentId)
    })
  }

Я просмотрел документы, но не вижу упоминаний о такой конструкции или практике (может быть, я скучаю по ней?). Является ли это просто стилевым соглашением, когда параметр и тип имеют одно и то же имя, а затем полагаются на вывод типа для соответствия параметру action с типом action? Или здесь происходит какой-то синтаксический сахар?

Почему бы не сделать его менее запутанным, явно указав тип actionType? Или сам факт того, что тип и параметр имеют одно и то же имя, является своего рода новым стилевым соглашением в сообществе Reason?

1 ответ

Из документов ReasonReact:

Существует пользовательский тип, называемый действием, названный так условно. Это вариант всех возможных переходов состояний в вашем компоненте.

Таким образом, вы можете переименовать его в actionType если хотите (и я бы поспорил, что может быть более понятным). Тип в редукторе выводится и не зависит от имени типа.

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