考虑以下内容:
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
?
背景:我正在创建一个应用程序和相应的Web API。他们将通过序列化和应对pocos(pofos?)互相交谈。在该应用程序和Web API引用的项目中,在模块中可以使用其定义(对应于Module1
)。API和类型是版本的,因此我想在应用程序和Web API中拥有一个Types
模块(对应于Module2
),我只是简单地别名API类型的最新版本(例如type Foo = Shared.V2.Foo
),然后我使用这些应用程序和API中的这些别名,因为这意味着我不需要在应用程序/API上参考特定版本。(如果这是一个可怕的主意,请给我开枪。)
您的类型别名在现有代码中完全未使用。如果您通过限定这样的标识符来明确使用它们,则可以使用:
let foo = Foo.Bar
let lorem = {Lorem.Ipsum = 2}