我正在尝试为ArangoDB的服务器端API编写定义文件。此API公开了一个db
对象,该对象可用于访问集合,但也可执行数据库级操作,如运行查询。所以我可以致电:
db['my-collection'] <- returns a collection object
但也是:
db._query('some query') <- returns a query cursor
所以我尝试了以下界面:
interface ArangoDatabase {
[collectionName: string]: ArangoCollection;
_query(query: string): ArangoCursor;
}
但这对TS看起来没有效果,因为它会产生以下错误:
Property '_query' of type '(query: string) => ArangoCursor' is not assignable to string index type 'ArangoCollection'.
注意:我尝试this solution为索引器提供ArangoCollection|ArangoCursor
类型,但它没有帮助。
我是否达到了可以使用界面建模的限制,还是有另一种方式?
提前致谢。
答案 0 :(得分:7)
您想要使用交叉点类型。试试这个:
interface ArangoDatabaseIndex {
[collectionName: string]: ArangoCollection;
}
interface ArangoDatabaseQuery {
_query(query: string): ArangoCursor;
}
type ArangoDatabase = ArangoDatabaseIndex & ArangoDatabaseQuery;
答案 1 :(得分:3)
查询成员的类型为> smallestCommons([1, 5])
> 60
> smallestCommons([5, 1])
> 60
> smallestCommons([1, 13])
> 360360
> smallestCommons([23, 18])
> 6056820
,这就是为什么(query: string)=>ArangoCursor
联合不起作用的原因。
应该是:
ArangoCollection|ArangoCursor