我可以在F#类型提供程序中创建多个相同类型的别名吗?

时间:2013-12-13 13:26:55

标签: f# type-providers

我正在使用类型提供程序来创建版本化的api,您可以选择选择要调用的组件的旧版本,而不是当前最新版本。

目前,它将这些放在一个类似于:

的命名空间中
Provided.ComponentName.VersionName(... this is the type constructor ...)

ComponentName目前是一个命名空间,如果这会产生影响。

一旦我构建了组件的所有特定版本,我还想公开:

Provided.ComponentName.Latest(... constructor ...)

作为静态方法或将返回最新版本实例的类型别名。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:3)

我认为没有办法生成F#类型别名(这是将Latest别名为特定版本类型的好方法。

作为替代方案,我认为您可以生成VersionName作为嵌套类型,Latest作为静态方法生成,返回相应的类型版本。为此,ComponentName必须是包含其他类型和类型的类型。一种静态方法:

// Creates an instance of `VersionName` 
// (a nested type of `ComponentName`)
Provided.ComponentName.VersionName(....)

// Creates an instance of `SomeVersionName` type
// (a static method of the `ComponentName` type)
Provided.ComponentName.Latest(....)

唯一令人遗憾的是VersionName是一种类型(并且可以使用new创建),而Latest是一种静态方法,所以它不适用于{ {1}}。