You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elm项目访问interval.start/end报错:This is not a record, so it has no fields to access!

问题解决:Elm中访问Interval字段提示“This is not a record, so it has no fields to access!”

错误原因

你定义的Interval是自定义联合类型(Union Type),构造函数Interval包裹了一个record,但直接对Interval类型的值使用.start/.end是无效的——Elm需要先解构出包裹在构造函数里的record,才能访问其字段。

修复步骤

  1. 解构Interval值:在view函数的参数里直接用模式匹配提取内部的record,把view interval =改成view (Interval intervalRecord) =。
  2. 修正字段访问:把代码里所有interval.end替换成intervalRecord.end,同时注意你代码里startText错误地用了interval.end,应该改成intervalRecord.start。

修正后的完整代码

view : Interval -> Html msg
view (Interval intervalRecord) = 
    let
        startText =
            div [class "interval-start"] [text (Date.dateToStringForView intervalRecord.start)]

        endText =
            case intervalRecord.end of
                Just endDate ->
                    div [class "interval-end"] [text (Date.dateToStringForView endDate)]

                Nothing ->
                    div [class "interval-end"] [text "Present"]
        
        lengthText =
            case length (Interval intervalRecord) of
                Just (years, months) ->
                    div [class "interval-length"] [text (String.fromInt years ++ " years, " ++ String.fromInt months ++ " months")]

                Nothing ->
                    text ""
    in
    div [class "interval"]
        [ startText
        , endText
        , lengthText
        ]

补充说明

如果后续需要在其他函数里访问Interval的字段,都要先通过模式匹配解构,比如:

getIntervalStart : Interval -> Date
getIntervalStart (Interval intervalRecord) =
    intervalRecord.start

内容的提问来源于stack exchange,提问作者Cornel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:15:04