在 Typescript 中导入 CouchDB Nano 6.4 类型
Import CouchDB Nano 6.4 Typings in Typescript
我想在带有 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 版。
那么我做错了什么?
看起来您应该能够将 Nano 函数转换为 ServerScope 接口,然后在与您的 nano 对象交互时智能感知应该会起作用。
import Nano, { ServerScope } from "nano";
const nano = Nano("http://localhost:5984") as ServerScope;
const alice = nano.db.use("alice");
发现此问题是由类型定义中的不明确 return 值引起的:
declare function nano(
config: nano.Configuration | string
): nano.ServerScope | nano.DocumentScope<any>;
nano
函数可以有 nano.ServerScope
或 nano.DocumentScope<any>
作为 return 值。通过做一些逆向工程,我了解到 ServerScope
对我来说是正确的 class。它提供文档中提供的 db
等属性。
所以我们需要在这里显式转换:
let nanoInstance = <Nano.ServerScope>Nano("http://localhost:5984");
现在文档中的所有示例代码都像这样运行良好:
nanoInstance.db.create("test123");
有什么区别?
我是 nosql 数据库的新手,无法准确解释差异。但我假设通过提供某种 url 参数,我们可以直接连接到单个文档,而不是整个数据库。当我知道更多时,我会尝试编辑此 post。目前,这与我无关。
我目前正在将 nano 与 typescript 一起使用,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"
}
我想在带有 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 版。
那么我做错了什么?
看起来您应该能够将 Nano 函数转换为 ServerScope 接口,然后在与您的 nano 对象交互时智能感知应该会起作用。
import Nano, { ServerScope } from "nano";
const nano = Nano("http://localhost:5984") as ServerScope;
const alice = nano.db.use("alice");
发现此问题是由类型定义中的不明确 return 值引起的:
declare function nano(
config: nano.Configuration | string
): nano.ServerScope | nano.DocumentScope<any>;
nano
函数可以有 nano.ServerScope
或 nano.DocumentScope<any>
作为 return 值。通过做一些逆向工程,我了解到 ServerScope
对我来说是正确的 class。它提供文档中提供的 db
等属性。
所以我们需要在这里显式转换:
let nanoInstance = <Nano.ServerScope>Nano("http://localhost:5984");
现在文档中的所有示例代码都像这样运行良好:
nanoInstance.db.create("test123");
有什么区别?
我是 nosql 数据库的新手,无法准确解释差异。但我假设通过提供某种 url 参数,我们可以直接连接到单个文档,而不是整个数据库。当我知道更多时,我会尝试编辑此 post。目前,这与我无关。
我目前正在将 nano 与 typescript 一起使用,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"
}