请考虑以下事项:
module Module1 =
type Foo = Bar | Baz
type Lorem = {Ipsum: int}
module Module2 =
type Foo = Module1.Foo
type Lorem = Module1.Lorem
let foo = Bar // Error: The value or constructor 'Bar' is not defined
let lorem = {Ipsum = 2} // Error: The record label 'Ipsum' is not defined
是否可以以简单的方式对类型进行别名,并且仍然能够在不打开Module1
的情况下实际构建它们?
后台:我正在创建一个应用和相应的网络API。他们将通过序列化和反序列化POCO(POFO?)来相互交谈,POCO的定义在应用程序和Web API引用的项目中的模块(对应Module1
)中可用。 API和类型已经过版本控制,因此我希望在应用和网络API中有一个Types
模块(对应于Module2
),其中我只是为最新版本的API添加别名类型(例如type Foo = Shared.V2.Foo
),然后我在app和API中使用这些别名,因为这意味着我不需要在整个app / API中引用特定版本。 (如果这是一个可怕的想法,请拍我。)
答案 0 :(得分:3)
您的类型别名在现有代码中完全未使用。如果您通过限定这些标识符来明确使用它们,则可以使用它:
let foo = Foo.Bar
let lorem = {Lorem.Ipsum = 2}