我想使用CouchDB作为数据库后端,在一个带有类型记录的NodeJS应用中。CouchDb-Nano用于此,因为它提供了所需的类型。所以我安装了两个软件包:
"devDependencies": {
"@types/nano": "^6.4.5"
},
"dependencies": {
"nano": "^6.4.3"
}我为正确的TS导入语法找到了这个问题。这对我不管用。通过四处游玩,我发现了以下编译:
import Nano from "nano";
let nano = Nano("http://localhost:5984");但我的智力在VS代码似乎完全不同。例如,文档说,nano有一个名为db的属性,几种用于选择数据库的方法如下:
var alice = nano.db.use('alice');
这段代码给了我一个错误,即不存在名为db的属性。Intellisense只将auth, config, session显示为属性:
根据注释头,这种类型是针对couchdb(没有其他项目也称为nano )和版本6.4 (这里使用的版本)。
那我做错什么了?
发布于 2018-04-18 15:11:07
看起来,您应该能够将Nano函数转换到ServerScope接口,然后intellisense在与您的nano对象交互时就可以工作了。
import Nano, { ServerScope } from "nano";
const nano = Nano("http://localhost:5984") as ServerScope;
const alice = nano.db.use("alice");发布于 2018-04-18 15:12:37
发现此问题是由类型定义中的一个不明确的返回值引起的:
declare function nano(
config: nano.Configuration | string
): nano.ServerScope | nano.DocumentScope<any>;nano函数可以以nano.ServerScope或nano.DocumentScope<any>作为返回值。通过做一些反向工程,我了解到ServerScope是适合我的类。它提供了像db这样的属性,这些属性都存在于文档中。
因此,我们需要在这里显式地转换:
let nanoInstance = <Nano.ServerScope>Nano("http://localhost:5984");现在,文档中的所有示例代码都能很好地工作如下:
nanoInstance.db.create("test123");有什么关系呢?
我在nosql数据库中太新了,无法准确解释两者之间的区别。但是我假设,通过提供某种url参数,我们可以直接连接到单个文档,而不是整个数据库。当我知道更多的时候,我会尝试编辑这篇文章。就目前而言,这与我无关。
发布于 2018-08-24 09:46:30
我目前使用的是带有类型记录的nano,intellisense似乎运行得很好。我让它这样设置的。
import Nano from 'nano';
const instance: Nano.ServerScope = Nano('http://localhost:5984/');
const db: Nano.DocumentScope<{}> = instance.db.use('alice');对于依赖项,我使用:
"dependencies": {
"nano": "^7.0.0"
},
"devDependencies": {
"@types/nano": "^6.4.6"
}https://stackoverflow.com/questions/49902818
复制相似问题