Estoy disfrutando de la ergonomía del desarrollador de VSCode y Typescript. Se ha producido un pequeño obstáculo cuando he aplicado un complemento a la pouchdb
paquete:
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)} );
El código anterior trabaja en el navegador, pero mi experiencia de desarrollo se ve obstaculizada porque VSCode no reconoce los métodos de complemento agregado:
¿Es este tipo de inferencia de tipo fuera del alcance de VSCode?
DE NOTA: No hay un paquete @types para este paquete en NPM: https://www.npmjs.com/package/@types/pouchdb-authentication Es un 404. ¿Es esa la pieza que falta?
Respuestas
1 para la respuesta № 1Por lo que puedo decir de la documentación (https://pouchdb.com/api.html#plugins), el plugin
método extiende tu PouchDB.Database
Objeta con lo que sea que le pases.
Como tal en realidad, si usas pouch.plugin(require("pouchdb-authentication"));
, entonces su base de datos ya no es de tipo PouchDB.Database<T>
; En realidad, es una extensión de esa interfaz. Entonces, el hecho de que VSCode se esté quejando es correcto, ya que el tipo que ha declarado remoteDB
tener no tiene un signup
método.
Lo que puedes hacer es crear tu propia interfaz para remoteDB
que se extiende PouchDB.Database<T>
con cualquier método y propiedades pouchdb-authentication
añade p.ej.
interface PouchDBSignupPlugin<T> extends PouchDB.Database<T> {
signup: (username: string, password: string, handler: (err: any, resp: any) => void) => any;
}
y usarlo como tal:
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>;
Entonces deberías encontrar que VSCode y TypeScript reconocerán un signup
método en remoteDB
.