Хотя события, полученные от React и от обработчиков событий, подключенных непосредственно к DOM, могут выглядеть одинаково, на самом деле они разные.React не дает вам необработанное событие DOM, но SyntheticEvent , и поэтому в Reason им были даны разные типы, о чем и сообщает ошибка типа.Вы не можете использовать Dom.event
там, где ожидается ReactEvent.Mouse.t
.В этом случае evt
- это Dom.event
, потому что он был получен путем подключения обработчика событий непосредственно к DOM с использованием bs-webapi
, а ReactEvent.Mouse.clientX
, конечно, ожидает ReactEvent.Mouse.t
.
Так что вместо этогоиспользования ReactEvent.Mouse.clientX
, вы должны использовать Webapi.Dom.MouseEvent.clientX
.
К сожалению, это все равно не будет работать, потому что Webapi.Dom.MouseEvent.clientX
ожидает Dom.mouseEvent
, а не Dom.event
, который является супертипом всех типов событий DOM и слишком общим для использования с функциями, специфичными для мыши.События.И это в свою очередь потому, что Webapi.Dom.EventTarget.addEventLsitener
не может понять, что "mousemove"
означает, что это событие мыши.Вместо этого вы должны использовать Webapi.Dom.EventTarget.addMouseMoveEventListener
, что дает вам Dom.mouseEvent
.
Обратите внимание, что ошибка типа, которую вы получаете, более запутанна, чем должна быть, потому что она выведет тип и укажет на ошибкунаходясь где-то, кроме того, где вы чувствуете, что ошибка возникла.Рекомендуется аннотировать типы, по крайней мере, когда вы получаете ошибку типа, которую вам трудно понять.Таким образом, компилятор не выведет тип как нечто, чего вы не ожидаете, и будет содержать источник ошибки.
Возможно, вы также захотите использовать Webapi.Dom.Document
вместо Webapi.Dom.EventTarget
.Document
наследует все в EventTarget
, но одновременно документирует и ограничивает тип, с которым вы работаете.