首页 > 解决方案 > 你如何初始化类型别名?

问题描述

你如何在 Elm 中初始化类型别名?

型号如下。

type alias Model =
    { name : String
    , tags : List Tag
    , token : Token
    , jwt : String 
    }

令牌在下面。

type alias Token =
    { accessToken : String
    }

我尝试像下面这样初始化。

init : String -> ( Model, Cmd Msg )
init flags =
    ( Model "" [] "" "", Cmd.none )

但是,会发生错误,例如

The 3rd argument to `Model` is not what I expect:

55|     ( Model "" [] "" "", Cmd.none )
                      ^^
This argument is a string of type:

    String

But `Model` needs the 3rd argument to be:

    Token

我知道第三个参数不是字符串。但是,我只是不知道如何在 init 函数中初始化自定义类型。

有人知道怎么做吗?

标签: elm

解决方案


初始化类型别名有两种选择。第一个,就像在你使用 with 时一样Model,将别名视为构造函数。要内联执行此操作,您需要将其括在括号中:

Model "" [] (Token "") ""

您也可以采用这种方法,但在单独的行中对其进行初始化:

let
    initialToken =
        Token ""
in
Model "" [] initialToken ""

如果拥有一个initialToken一般可用的东西很有用(就像拥有一个init版本Modellet. Token或者,成为自己的模块并init暴露自己的模块可能是有意义的。

第二种选择是直接构造类型而不使用别名。在这种情况下,这意味着创建一个包含accessToken字段的记录:

Model "" [] { accessToken = "" } ""

推荐阅读