在打字稿

时间:2018-04-18 14:50:07

标签: javascript typescript couchdb typescript-typings couchdb-nano

我想在带有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版本。

那么我做错了什么?

3 个答案:

答案 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>; 功能可以nanonano.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"
}