Имеется ли смысл в том, что вводит тип в функцию в 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 ответ
Существует пользовательский тип, называемый действием, названный так условно. Это вариант всех возможных переходов состояний в вашем компоненте.
Таким образом, вы можете переименовать его в actionType
если хотите (и я бы поспорил, что может быть более понятным). Тип в редукторе выводится и не зависит от имени типа.