【发布时间】:2018-01-23 18:58:45
【问题描述】:
我有一个带有类型变量cursor 的接口,它只与接口中的方法相关:
interface OrderIndexI<cursor> {
getCursor(): cursor;
fromCursor(cursor): number;
}
当我实现这个接口时,实现类选择cursor应该是什么。
class OrderIndex1 implements OrderIndexI<Cursor1> { ... }
class OrderIndex2 implements OrderIndexI<Cursor2> { ... }
这个类的用户将获得游标类型,但他们只能使用其上的接口方法,出于意图和目的,它是一个不透明的类型。
但是,当我想使用与任何 OrderIndexI<*> 一起工作的通用函数时,上述方法不起作用,而确切的光标类型并不重要。
function genericWork (o: OrderIndexI<*>) { ... }
我发现它只能这样做:
function genericWork (o: OrderIndexI<any>) { ... }
但我认为让这成为一种选择是没有意义的。用户应该有某种方式不明确表示他们可以使用“任何”cursor,因为cursor 总是只打算由接口方法使用。有没有办法“隐藏”cursor,所以当用户想要使用OrderIndexI 时没有明确指定它。
在 Haskell 中,这是通过存在类型解决的。
【问题讨论】:
标签: javascript flowtype