我想在带有Typescript的NodeJS应用程序中使用CouchDB作为数据库后端。 CouchDb-Nano用于此目的,因为它提供了所需的打字。所以我安装了两个软件包:
"devDependencies": {
"@types/nano": "^6.4.5"
},
"dependencies": {
"nano": "^6.4.3"
}
我找到this question来获取正确的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
作为属性:
VS Code intellisense screenshot
根据comment-header,输入的内容适用于couchdb-nano(没有其他项目也称为nano),也适用于6.4版本。
那么我做错了什么?
答案 0 :(得分:0)
看起来你应该能够将Nano功能转换为ServerScope界面,然后intellisense在与nano对象交互时应该有效。
import Nano, { ServerScope } from "nano";
const nano = Nano("http://localhost:5984") as ServerScope;
const alice = nano.db.use("alice");
答案 1 :(得分:0)
发现此问题是由类型定义中的模糊返回值引起的:
import nibabel
img = nibabel.load(filename)
img.set_data_dtype(dtype)
img.to_filename(new_filename)
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");
我在nosql-databases中太新了,无法准确解释这些差异。但是我假设通过提供某种url-parameter,我们可以直接连接到单个文档,而不是整个数据库。当我知道更多时,我会尝试编辑这篇文章。目前,这与我不是主要相关。
答案 2 :(得分:0)
我目前正在使用带有打字稿的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"
}