假设我有以下几种类型:
type TypeA = { A: string } type TypeB = { B: string }
我对他们两个都有联合体类型:
type MyUniOnType= TypeA | TypeB
使用仅包含联合类型的类型:
type MyCOntainer= { Union: MyUnionType }
现在,如果我创建联合类型中一种类型的实例:
let resultA = { A = "abc" }
当我尝试将该实例分配给容器中的值时
let result = { Union = resultA }
编译器抱怨说
编译错误(第10行,第24行):该表达式的类型为MyUnionType,但此处的类型为TypeA
但是TypeA
是联合中指定的有效类型之一!如何将其分配给我的Union财产?
这是该程序的示例:https : //dotnetfiddle.net/fgJKpM
在中type MyUniOnType= TypeA | TypeB
,TypeA
并且TypeB
不引用前面的TypeA
和TypeB
记录,但是是该MyUnionType
类型的null构造函数。如果希望它们包含这些类型的值,则需要将它们包括在定义中,例如
type MyUniOnType= TypeA of TypeA | TypeB of TypeB
您可能想要重命名构造函数,以避免它们与所包含的类型之间的混淆。
然后,您需要向构造函数提供相应的实例:
let resultA = TypeA { A = "abc" }