RxDB RxCollectionCreator Ошибка машинописи - PullRequest
0 голосов
/ 22 мая 2018

Я впервые использую RxDB, и я столкнулся со странной ошибкой Typescript.

Соответствующие части моего проекта Electron следующие:

import RxDB, { RxCollection, RxDatabase } from "rxdb";
RxDB.plugin(require("pouchdb-adapter-idb"));

// Took this from the Electron example on Github so I knew I had a valid JSONSchema
const heroSchema = {
  title: 'hero schema',
  description: 'describes a simple hero',
  version: 0,
  type: 'object',
  properties: {
    name: {
      type: 'string',
      primary: true
    },
    color: {
      type: 'string'
    }
  },
  required: ['color']
};

// These lines are actually in an async function so the await keyword is not an issue
const db = await RxDB.create({ name: "heroedb", adapter: "idb" });

const devices = await db.collection({
     name: "herocollection",
     schema: heroSchema
});

Но Typescript жалуется:

Argument of type '{ name: string; schema: { title: string; description: string; version: number; type: string; prop...' is not assignable to parameter of type 'RxCollectionCreator'.
Types of property 'schema' are incompatible.
Type '{ title: string; description: string; version: number; type: string; properties: { name: { type: ...' is not assignable to type 'RxJsonSchema | RxSchema<any>'.
Type '{ title: string; description: string; version: number; type: string; properties: { name: { type: ...' is not assignable to type 'RxSchema<any>'.
Property 'jsonID' is missing in type '{ title: string; description: string; version: number; type: string; properties: { name: { type: ...'

Если я добавлю jsonID к своей схеме, он просто будет жаловаться на другое отсутствующее свойство, и прочее, и прочее.Очевидно, я сделал что-то не так.Любая мудрость в этом вопросе будет принята с благодарностью.

1 Ответ

0 голосов
/ 23 мая 2018

Исходный код RxDB можно найти здесь .Когда вы используете функцию RxSchema.create ({...}), она фактически создает экземпляр класса RxSchema, поэтому тип обязательно будет соответствовать.В противном случае интерфейс для создателя коллекции выглядит следующим образом:

export interface RxCollectionCreator {
name: string;
schema: RxJsonSchema | RxSchema;
pouchSettings?: PouchSettings;
migrationStrategies?: {
    [key: number]: Function
};
autoMigrate?: boolean;
statics?: {
    [key: string]: Function
};
methods?: {
    [key: string]: Function
};
attachments?: {
    [key: string]: Function
};
options?: any;

}

И интерфейсом схемы является либо RxJsonSchema, либо RxSchema.Смотрите также примеры в исходном коде.Кажется, вы возражаете против определения типа RxJsonSchema, однако либо отсутствует какой-либо литерал интерфейса, либо есть некоторые дополнительные, на которые жалуется TypeScript.

export declare class RxJsonSchema {
title?: string;
description?: string;
version: number;
type: 'object';
properties: { [key: string]: RxJsonSchemaTopLevel };
required?: Array<string>;
compoundIndexes?: Array<string | Array<string>>;
disableKeyCompression?: boolean;
additionalProperties?: true;
attachments?: {
        encrypted?: boolean
};

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...