带有索引器和其他属性的Typescript接口

时间:2017-02-26 10:37:24

标签: typescript

我正在尝试为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类型,但它没有帮助。

我是否达到了可以使用界面建模的限制,还是有另一种方式?

提前致谢。

2 个答案:

答案 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