Как установить правильный тип содержимого документа PouchDB без использования каких-либо - PullRequest
0 голосов
/ 15 октября 2018
import PouchDB from 'pouchdb';
const db: PouchDB.Database<Config> = new PouchDB(process.env.POUCH_REMOTE);
const orgs = [{login: 'username'}];
interface Config {
  members: string[];
  config: {
    irc: {
      server: string
      port: number
      nickname: string
      ident: string
      realname: string
      NickServPass: string
      channel: string
      sasl: {
        cert: Buffer | string
        key: Buffer | string
        key_passphrase: string
      }
      bindhost: string | null
      requireAuth: boolean
      notice: boolean
    }
    attentionString: string
    multipleCommitsMaxLen: number
    detailedDeletesAndCreates: boolean
  };
  repos: {
    [key: string]: {
      enabled: boolean
    }
  };
}

let orgDB: any; //<-- Need to use type `any` here, so we don't get those darn messages
for await (const org of orgs) {
  try {
    orgDB = await db.get(org.login);
  } catch (e) {
    if (e.name === 'not_found') {
      db.put({ _id: org.login });
      orgDB = await db.get(org.login);
    }
  }

  const members: Array<{login: string}> = [{login:"user1"}, {login:"user2"}]
  for (let { login: member } of members) {
    if (!orgDB.members!.includes(member)) { //<-- Here the used before assignment happens
      orgDB.members!.push(member); //<-- Here the used before assignment happens
    }
  }


  const repos: Array<{full_name:string}> = [{full_name:"repo1"},{full_name:"repo-new"}]
  for (let repo of repos) {
    if (!orgDB.repos[repo.full_name!]) //<-- Here the used before assignment happens
      orgDB.repos[repo.full_name!] = { enabled: true }; //<-- Here the used before assignment happens
  }
  db.put(orgDB); //<-- Here the used before assignment happens
}

Как указать правильный тип для переменной, содержащей документ из PouchDB?

Если я использую наследование типов по умолчанию от типов, я всегда получаю Property 'x' does not exist on type 'IdMeta & GetMeta'..Теперь, когда я использую созданные мной наборы и интерфейс PouchDB.Database и пытаюсь отправить новый документ в базу данных, я получаю обратное сообщение о том, что свойство отсутствует.

Я хочу использоватьправильные типы вместо any, так как это не самый лучший.Есть идеи или обходные пути?

...