榆树:定义不带参数的订阅端口

elm: define subscription port with no parameters

有没有办法在 Elm 中定义一个不带参数的订阅端口?

类似于:

port updateTime : () -> Sub msg

使用此代码,我得到的错误是 "Port 'updateTime' has an invalid type"

使用代码:

port updateTime : (String -> msg) -> Sub msg

它正在工作,但我不需要从 javascript 函数向 Elm 发送任何内容。

你能得到的最接近的可能是这样的:创建类似于你的示例的端口,但第一个参数为 (() -> msg):

port updateTime : (() -> msg) -> Sub msg

假设您有一个 UpdateTime Msg 不接受任何参数,

type Msg
    = ...
    | UpdateTime

然后您可以像这样绑定 updateTime 订阅:

subscriptions : Model -> Sub Msg
subscriptions model =
    updateTime (always UpdateTime)

现在,在 javascript 端,您必须将 null 作为唯一参数传递。

app.ports.updateTime.send(null);

Elm 0.19 更新

在 Elm 0.19 中,您必须明确指出哪些 Elm 模块公开了端口,因此您可能必须更新模块定义以包含 port module.

port module Main exposing (main)