Búsqueda de sitios web

typescript - ¿Es posible pedirle a Dexie que excluya una o más propiedades de una tabla para que no se guarden en IndexedDB?


¿Es posible excluir una o más propiedades de una tabla cuando se crea en la tienda o se guarda una entrada en IndexedDB?

Por ejemplo, la siguiente descripción de tabla (Typescript) tiene cuatro propiedades donde solo las tres primeras se utilizarán para la creación y adición de nuevas entradas:

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

La propiedad notInDb no se considerará ni al crear la tabla ni al agregar una instancia. notInDb solo se utiliza dentro de la clase real que implementa la interfaz.

Respuesta #1

Indexeddb solo almacenará propiedades enumerables propias. Por lo tanto, es posible usar Object.defineProperty() y marcarla como {enumerable: false}.

Respuesta #2

No puedes seleccionar solo ciertas propiedades de un objeto para ser almacenadas. Supongo que la razón por la que quieres excluir una propiedad es porque es demasiado grande o no se puede clonar por estructura.

indexedDB utiliza un algoritmo de clonación estructurada que solo acepta ciertos objetos. Básicamente, esto es serialización, pero no a una cadena. Por lo tanto, necesitas diseñar tus propios métodos de serialización. Copia las propiedades que deseas en un objeto básico. Esto suena a sobrecarga, pero realmente no es tan malo. En lugar de intentar almacenar la clase en sí, crea un método serialize que cree un objeto básico y almacena eso en su lugar. Crea un método deserialize correspondiente que acepte un objeto básico y a partir de él cree una instancia de la clase.

Sugiero intentar este enfoque primero. Si más adelante encuentras que el rendimiento es un problema y deseas seguir utilizando IndexedDB, entonces probablemente necesitarás replantear tu diseño y diseñar teniendo en cuenta los requisitos de IndexedDB.