VSCode/Typescript可以对插件修改的对象进行类型推断吗?

VSCode/Typescript可以对插件修改的对象进行类型推断吗?,typescript,plugins,visual-studio-code,code-completion,Typescript,Plugins,Visual Studio Code,Code Completion,我很喜欢VSCode和Typescript的开发人员工效学。当我将一个插件应用到PockDB包时,出现了一个小问题: import * as pouch from 'pouchdb-browser' pouch.plugin(require('pouchdb-authentication')); const remoteDB: PouchDB.Database<PouchDB.Core.Encodable> = new pouch( 'https://user.clouda

我很喜欢VSCode和Typescript的开发人员工效学。当我将一个插件应用到
PockDB
包时,出现了一个小问题:

import * as pouch from 'pouchdb-browser'
pouch.plugin(require('pouchdb-authentication'));

const remoteDB: PouchDB.Database<PouchDB.Core.Encodable> = new pouch(
    'https://user.cloudant.com/databaseName',
    { skip_setup: true } // a param wanted by the plugin
);

// invoking a method added by the plugin:
remoteDB.signup('username','password', (err, resp) => {console.log(err)} );
import*作为“PockDB浏览器”中的邮袋
插件(需要('PockDB-authentication');
const-remoteDB:pockdb.Database=新邮袋(
'https://user.cloudant.com/databaseName',
{skip_setup:true}//插件需要的参数
);
//调用插件添加的方法:
remoteDB.signup('username','password',(err,resp)=>{console.log(err)});
上面的代码在浏览器中运行,但我的开发经验受到阻碍,因为VSCode无法识别插件添加的方法:

这种类型的推断是否超出了VSCode的范围


注意:NPM上没有@types包:是404。这是缺少的部分吗?

据我从文档()中可以看出,
plugin
方法用传递给它的任何东西扩展了
pockdb.Database
对象

实际上,如果您使用
backy.plugin(require('backdb-authentication')
,则您的数据库不再是
数据库类型;它实际上是该接口的扩展。因此,VSCode抱怨的事实是正确的,因为您声明的
remoteDB
类型没有
signup
方法

然后,您可以为
remoteDB
创建自己的接口,该接口扩展了
backdb.Database
,使用
backdb身份验证添加的任何方法和属性;e、 g

interface PouchDBSignupPlugin<T> extends PouchDB.Database<T> {
    signup: (username: string, password: string, handler: (err: any, resp: any) => void) => any;
}
接口backdbsignupplugin扩展了backdb.Database{
注册:(用户名:字符串,密码:字符串,处理程序:(err:any,resp:any)=>void)=>any;
}
并按如下方式使用:

const remoteDB = new pouch<PouchDB.Core.Encodable>(
    'https://user.cloudant.com/databaseName',
    { skip_setup: true } // a param wanted by the plugin
) as PouchDBSignupPlugin<PouchDB.Core.Encodable>;
const remoteDB=新邮袋(
'https://user.cloudant.com/databaseName',
{skip_setup:true}//插件需要的参数
)作为一个信号发生器;
然后您会发现VSCode和TypeScript将识别
remoteDB
上的
signup
方法