假设我具有以下类型:
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
答案 0 :(得分:6)
在type MyUnionType = TypeA | TypeB
中,TypeA
和TypeB
并不引用先前的TypeA
和TypeB
记录,而是{{1}的空构造函数}类型。如果您希望它们包含这些类型的值,则需要将它们包括在定义中,例如
MyUnionType
您可能想重命名构造函数,以避免它们与所包含的类型之间的混淆。
然后您需要向构造函数提供相应的实例:
type MyUnionType = TypeA of TypeA | TypeB of TypeB