2017-06-04 6 views
0

私はVSCodeとTypescriptの開発者用エルゴノミクスを楽しんでいます。私はpouchdbパッケージにプラグインを適用した際のわずかなほつれが発生しました:VSCode/Typescriptはプラグイン変更オブジェクトの型推論を行うことができますか?

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)}); 

上記のコードブラウザで作品が、VSCodeが認識されていないので、私の開発経験が阻害されるプラグインを追加方法:

VSCode TS claiming 'signup' property doesn't exist

はVSCodeの範囲の外に型推論のこの種のですか?

OF注:NPMにこのパッケージの@typesパッケージはありません。https://www.npmjs.com/package/@types/pouchdb-authenticationは404です。欠けていますか?

答えて

1

ドキュメント(https://pouchdb.com/api.html#plugins)からわかるように、pluginメソッドは、あなたが渡したものでPouchDB.Databaseオブジェクトを拡張します。

実際には、pouch.plugin(require('pouchdb-authentication'));を使用すると、データベースのタイプはPouchDB.Database<T>ではなくなります。それは実際にはそのインタフェースの拡張です。だから、remoteDBにはsignupメソッドがないと宣言したタイプとして、VSCodeが苦情を申し立てているという事実は正しいです。

remoteDB用の独自のインターフェイスを作成してPouchDB.Database<T>の方法とプロパティを使用して拡張する場合は、pouchdb-authenticationが追加されます。例えば

interface PouchDBSignupPlugin<T> extends PouchDB.Database<T> { 
    signup: (username: string, password: string, handler: (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>; 

を次にあなたがVSCodeと活字体がremoteDBsignup方法を認識することを見つける必要があります。

関連する問題