如何在Elm中初始化类型别名?
型号如下。
type alias Model =
{ name : String
, tags : List Tag
, token : Token
, jwt : String
}
Run Code Online (Sandbox Code Playgroud)
令牌在下面。
type alias Token =
{ accessToken : String
}
Run Code Online (Sandbox Code Playgroud)
我尝试如下初始化。
init : String -> ( Model, Cmd Msg )
init flags =
( Model "" [] "" "", Cmd.none )
Run Code Online (Sandbox Code Playgroud)
但是,会发生类似的错误
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
Run Code Online (Sandbox Code Playgroud)
我知道第三个参数不是字符串。但是,我只是不知道如何在init函数中初始化自定义类型。
有人知道怎么做吗?
您可以使用两个选项来初始化类型别名。首先,就像在与一起使用时一样Model,是将别名视为构造函数。要进行此内联,需要将其包装在括号中:
Model "" [] (Token "") ""
Run Code Online (Sandbox Code Playgroud)
您也可以采用这种方法,但在单独的行中对其进行初始化:
let
initialToken =
Token ""
in
Model "" [] initialToken ""
Run Code Online (Sandbox Code Playgroud)
如果initialToken通常可以使用,则很有用(例如拥有的init版本很有用Model),那么您可能希望将其作为从模块中导出的顶层声明,而不是将其隐藏在中let。或者Token将自己的模块与自己的模块一起init暴露可能是有意义的。
第二种选择是直接构造类型而不使用别名。在这种情况下,这意味着创建带有accessToken字段的记录:
Model "" [] { accessToken = "" } ""
Run Code Online (Sandbox Code Playgroud)