我最近一直致力于为TypeScript 0.9.1定义生成FFI代码。我遇到了这个问题……
此代码:
type 'T IList with
member __.ConcatWith<'U when 'U :> 'T IList>(items : 'U) : 'T[] = failwith "not implemented"
产生此类型错误:
未定义类型参数“T”。
注意:此错误仅发生在类型约束部分内。在其他地方使用泛型类型参数(例如,作为返回类型)可以正常工作。
但是,如果我定义的是类型而不是类型扩展,那就没问题了。不幸的是,我没有这种奢侈。我定义的扩展有时需要在单独的程序集中。
我知道[
我可以将该方法放在模块
中。但是,这些方法将更难发现。这不是我想要的。
我可以使用C#。但是,我将无法添加扩展索引和属性。因此,这是不可接受的。
这个问题有什么解决方法吗?
我想我可能必须取消类型约束。例如:ConcatWith
在我看来这是bug。
如果您实际需要表达的约束是此处示例中的约束('U:
type 'T IList with
member __.ConcatWith(items : #IList<'T>) : 'T[] = failwith "not implemented"
F#3.1支持使用Exency
的C#样式扩展方法(定义和消费),因此这可能是另一种选择,但这意味着依赖新版本的F#(但也许这并不坏,如果有另一种方法可以使用在F#3.0中工作的模块函数编写它)