F#代码不够通用(使用静态成员约束)

时间:2019-01-16 16:48:08

标签: .net f# blazor bolero

我正在尝试创建一个通用函数,该函数检查记录是否为有效格式,因为该记录实现的静态成员有效。尝试在Bolero(Blazor)框架内的ElmishComponent中使用此功能时,出现以下错误

  

此代码不够通用。当^ childModel :(静态成员有效:^ childModel-> bool)时,类型变量^ childModel不能被泛化,因为它将逃避其范围

使用以下代码

 <?xml version="1.0" encoding="utf-8"?>
 <openerp>
<data>
   <record id="res_partner_view_purchase_buttons_TVA_RC" model="ir.ui.view">
        <field name="name">num.TVA.RC.res.partner.view.purchase.</field>
        <field name="model">res.partner</field>
        <field name="inherit_id" ref="base.view_partner_form"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='website']" position="after">
                        <field name="CodeTVA" select="1" placeholder="Code TVA" widget="mask" data-inputmask-mask="9999999/A/A/A/999" />
                        <field name="RC" select="1" placeholder="Num RC"/>
            </xpath>
        </field>
   </record>
</data>

1 个答案:

答案 0 :(得分:2)

我可能会丢失一些东西,但是在我看来,一种更简单的方法是使用子模型实现的接口-这样,您根本不必费心静态成员约束:

type IValidable =
  abstract IsValid : bool

type Component<'T, 'childModel, 'childMessage when 
      'T :> ElmishComponent< 'childModel, 'childMessage> and 
      'childModel :> IValidable>() =
    inherit ElmishComponent<Model<'childModel>, Message<'childModel, 'childMessage>>()
    override this.View model dispatch = 
        let test = model.Child.IsValid            
        ()