Typescript 是否可以要求Dexie排除要保存在IndexedDB中的一个或多个表属性?

Typescript 是否可以要求Dexie排除要保存在IndexedDB中的一个或多个表属性?,typescript,indexeddb,dexie,Typescript,Indexeddb,Dexie,在存储中创建表或在indexeddb中保存条目时,是否可以排除表的一个或多个属性 例如,下表描述Typescript有四个属性,其中只有前三个属性用于创建和添加新条目: interface IContact { id?: number, first: string, last: string, notInDb: string } 创建表或添加实例时,不应考虑notInDb属性。notInDb仅在实现接口的实际类中使用。您不能仅从要存储的对象中选择某些属性。我猜您想要排除某个属性

在存储中创建表或在indexeddb中保存条目时,是否可以排除表的一个或多个属性

例如,下表描述Typescript有四个属性,其中只有前三个属性用于创建和添加新条目:

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

创建表或添加实例时,不应考虑notInDb属性。notInDb仅在实现接口的实际类中使用。

您不能仅从要存储的对象中选择某些属性。我猜您想要排除某个属性的原因是因为它太大或结构不可克隆

indexedDB使用只接受特定对象的结构化克隆算法。这基本上是序列化,但不是字符串。因此,您需要设计自己的序列化方法。将所需的特性复制到基本对象中。这听起来像是开销,但实际上并没有那么糟糕。与其尝试存储类本身,不如创建一个序列化方法来创建一个基本对象并存储它。创建相应的反序列化方法,该方法接受基本对象,并从中创建类的实例


我建议先试试这种方法。如果您后来发现性能是一个问题,并且希望继续使用indexedDB,那么您可能需要重新考虑您的设计,并围绕indexedDB的要求进行设计。

您不能仅从要存储的对象中选择某些属性。我猜您想要排除某个属性的原因是因为它太大或结构不可克隆

indexedDB使用只接受特定对象的结构化克隆算法。这基本上是序列化,但不是字符串。因此,您需要设计自己的序列化方法。将所需的特性复制到基本对象中。这听起来像是开销,但实际上并没有那么糟糕。与其尝试存储类本身,不如创建一个序列化方法来创建一个基本对象并存储它。创建相应的反序列化方法,该方法接受基本对象,并从中创建类的实例


我建议先试试这种方法。如果您后来发现性能是一个问题,并且希望继续使用indexedDB,那么您可能需要重新考虑您的设计,并围绕indexedDB的要求进行设计。

indexedDB将只存储自己的可枚举属性。因此,可以使用Object.defineProperty并将其标记为{enumerable:false}。

Indexeddb将只存储自己的可枚举属性。因此,可以使用Object.defineProperty并将其标记为{enumerable:false}