gpt4 book ai didi

javascript - 如何在 JavaScript 流接口(interface)中创建 "encapsulated"/"existential"类型

转载 作者:行者123 更新时间:2023-12-01 02:29:45 24 4
gpt4 key购买 nike

我有一个带有类型变量 cursor 的接口(interface)仅与接口(interface)内的方法相关:

interface OrderIndexI<cursor> {
getCursor(): cursor;
fromCursor(cursor): number;
}

当我实现这个接口(interface)时,实现类选择cursor应该是这样。

class OrderIndex1 implements OrderIndexI<Cursor1> { ... }
class OrderIndex2 implements OrderIndexI<Cursor2> { ... }

此类的用户将获取游标类型,但他们只能使用其上的接口(interface)方法,出于意图和目的,它是一种不透明类型。

但是,当我想使用适用于任何 OrderIndexI<*> 的通用函数时,上述方法不起作用其中确切的光标类型并不重要。

function genericWork (o: OrderIndexI<*>) { ... }

我发现它只能这样做:

function genericWork (o: OrderIndexI<any>) { ... }

但我认为允许这成为一种选择是没有意义的。用户应该有某种方式不明确地说他们可以使用“任何”cursor ,自 cursor始终仅供接口(interface)方法使用。有没有办法“隐藏”cursor所以当用户想使用OrderIndexI时并没有明确指定.

https://flow.org/try/#0JYOwLgpgTgZghgYwgAgPJQCbQJIiwD2wB4EBXKAZwHsoA+ZAbwChlkBzCMAYXOqgAoAlAC5kZSjQDcLZDChUAtjwkDxfEchCkFAI2jSAvkyZgAngAcUyvsgC8jZHB0JRW3dGQHpCADZwKFGiYOHgQ+ACMyMAK5j4QChDggehYULgExNY09MysHNy8NMhCollQjDKsUJzkIA5OLsiRXjJGrHKKZcVqNKWFUBpueuW5rMjVYLVi-QB0DdKsRkYmFlb9AEx2DlgQrtrDnt5+AUGp6WGb0bHxiWDJwWmhhERl6zky+V0lyK8VY+M1KB1BjIHaiZoLTwyDpKfrdfp9FTrQb7DyjKqAuo9KAzHaQpbGGCkEAIMDAKh1MBwADWEAAKgALYCBfhUUQpEIZIgAKloKPcIxkcTAYi2VBmn36QkhEym4phZX4CEEhmMwuQVGAkXsIAgAHdTpywuFpUx1ZrNjr9YbHgR1qbjFTaYzmaytSqTDT6UyKG7kZIgA

在 Haskell 中,这是通过存在类型来解决的。

最佳答案

只需将 genericWork 函数定义为 generic :

function takeThis<T>(o: OrderIndexI<T>): number {
let c = o.getCursor();
return o.fromCursor(c);
}

关于javascript - 如何在 JavaScript 流接口(interface)中创建 "encapsulated"/"existential"类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com