我有以下签名文件F.fsi
:
module M =
type T1 = A | B
type T2 =
| F
| G
static member x1 : list<T1>
static member x2 : list<T1>
Run Code Online (Sandbox Code Playgroud)
在我的实现文件中,F.fs
我有以下内容:
module M =
type T1 = A | B
type T2 =
| F
| G
static member x1 = [T1.A; T1.B]
static member x2 = [] // LINE MARKER 1; ERROR OCCURS HERE
Run Code Online (Sandbox Code Playgroud)
Visual Studio x2
使用以下错误消息对行的定义进行红线处理:
模块'M'包含
static member M.T2.x2 : obj list
但其签名指定static member M.T2.x2 : T1 list
类型不同
似乎在实现文件中,空列表被推断为具有泛型类型,即使签名文件清楚地指示列表是类型T1
.我尝试了以下更正:
static member (x2 : list<T1>) : []
Run Code Online (Sandbox Code Playgroud)
但这次我收到以下错误消息:
只有简单的变量模式才能绑定在
let rec
构造中
我通过制作x1
和x2
转换函数来绕过这个问题,但是有没有不同的方法让Visual Studio正确推断列表的类型?
注释应该是
module M =
type T1 = A | B
type T2 =
| F
| G
static member x1 = [T1.A; T1.B]
static member x2 : List<T1> = []
Run Code Online (Sandbox Code Playgroud)
因为您正在注释返回类型