dexie-better-types
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

dexie-better-types

Better types for dexie.js

The main improvement is in the type safety of where, orderBy and similar conditions, which now require that the keys and values passed match the containing type of the Table

how to use

First, install the types

npm install --save-dev dexie-better-types

Then, use the Table type coming from dexie-better-types, rather than dexie itself.

import Dexie from 'dexie';
import type { Table } from 'dexie-better-types'

class MyAppDatabase extends Dexie {
    // Declare implicit table properties.
    // (just to inform Typescript. Instantiated by Dexie in stores() method)
    contacts!: Table<IContact, number>; // number = type of the primkey
    //...other tables goes here...

    constructor () {
        super("MyAppDatabase");
        this.version(1).stores({
            contacts: '++id, first, last',
            //...other tables goes here...
        });
    }
}

interface IContact {
    id?: number,
    first: string,
    last: string
}

example errors

Trying to use the wrong key:

let res = await db.contacts.where('someKey').equals('someValue').toArray()

gets you an error message like the following

No overload matches this call.
  Overload 1 of 2, '(index: KeysOf<IContact>): WhereClause<IContact, KeysOf<IContact>, number>', gave the following error.
    Argument of type '"someKey"' is not assignable to parameter of type 'KeysOf<IContact>'.
  Overload 2 of 2, '(equalityCriterias: Partial<IContact>): Collection<IContact, number>', gave the following error.
    Type '"someKey"' has no properties in common with type 'Partial<IContact>'.ts(2769)

The checks work for values too, i.e.

let res = await db.contacts.where('first').equals(1).toArray()

yields the error

Argument of type 'number' is not assignable to parameter of type 'string'.ts(2345)

Compound keys up to 5 items are supported

// Same error as above
let res = await db.contacts.where(['first', 'last']).equals(['v1', 2]).toArray()

Readme

Keywords

none

Package Sidebar

Install

npm i dexie-better-types

Weekly Downloads

1

Version

1.0.2

License

ISC

Unpacked Size

12 kB

Total Files

4

Last publish

Collaborators

  • spion