使用部分定义或默认定义“类型别名”
Define `type alias` with a partial definition or default
有办法干掉这个吗?
我不想重复contents : List Nav
和wrapperId : String
type alias InputModel =
{ contents : List Nav
, containerClassName : Maybe String
, wrapperId : String
}
type alias Model =
{ contents : List Nav
, containerClassName : String
, wrapperId : String
}
modelWithDefaults : InputModel -> Model
modelWithDefaults input =
{ input | containerClassName = withDefault "" input.containerClassName }
是的,有!您可以将公共字段移动到单独的记录中并向其添加行变量。指定剩余字段的行变量 a
可以稍后提供:
type alias CommonModel a =
{ a
| contents : List Nav
, wrapperId : String
}
type alias InputModel =
CommonModel
{ containerClassName : Maybe String }
type alias Model =
CommonModel
{ containerClassName : String }
您还可以使用行变量来编写接受任何记录的函数,只要它具有公共字段即可。例如
getWrappedId : CommonModel a -> String
getWrapperId { wrapperId } = wrappedId
将接受 InputModel
和 Model
,或任何其他至少包含 CommonModel
指定字段的记录。将推断行变量,就像任何其他类型变量一样。
有办法干掉这个吗?
我不想重复contents : List Nav
和wrapperId : String
type alias InputModel =
{ contents : List Nav
, containerClassName : Maybe String
, wrapperId : String
}
type alias Model =
{ contents : List Nav
, containerClassName : String
, wrapperId : String
}
modelWithDefaults : InputModel -> Model
modelWithDefaults input =
{ input | containerClassName = withDefault "" input.containerClassName }
是的,有!您可以将公共字段移动到单独的记录中并向其添加行变量。指定剩余字段的行变量 a
可以稍后提供:
type alias CommonModel a =
{ a
| contents : List Nav
, wrapperId : String
}
type alias InputModel =
CommonModel
{ containerClassName : Maybe String }
type alias Model =
CommonModel
{ containerClassName : String }
您还可以使用行变量来编写接受任何记录的函数,只要它具有公共字段即可。例如
getWrappedId : CommonModel a -> String
getWrapperId { wrapperId } = wrappedId
将接受 InputModel
和 Model
,或任何其他至少包含 CommonModel
指定字段的记录。将推断行变量,就像任何其他类型变量一样。