YDN-DB 密钥生成器 TypeScript

Posted

技术标签:

【中文标题】YDN-DB 密钥生成器 TypeScript【英文标题】:YDN-DB key Generator TypeScript 【发布时间】:2016-05-10 21:32:19 【问题描述】:

我想使用 TypeScript 创建一个数据库模式。这很简单,但我不能或不知道如何定义密钥生成器。 以用户指南为例,这样一段代码sn-p(使用javascript):

var schema = 
  ...
indexes: [
  
    name: 'name', // index for case in-sensitive sorting
    generator: function(obj) 
      var name = obj.first + ' ' + obj.last;
      return name.toLowerCase();
    
  
],

我可以使用库 ydn.db-1.0.ts(从 YDN-DB 服务器下载)或 ydn-db.d.ts(从DefinitelyTyped 下载)?

比如我写了这个ts文件:

/// <reference path="typings/ydn-db/ydn-db.d.ts" />
module YdnDbTest

  module DatabaseHelper
  
    interface Place
    
      Name: string;
      Location: string;
    

    var AppDbSchema: DatabaseSchemaJson =
    
      stores:
      [
        
          name: "AppDbStore",
          keyPath: "Name",
          indexes:
          [
            
              name: "idxLocation",
              keyPath: "Location",
              unique: true,
            
          ]
        
      ]
   
 

,我想为Location写一个生成器。我想写这样的东西:

        ...
        indexes:
        [
          
            name: "idxLocation",
            generator: (record: Place): string => 
             return record.Location.toLowerCase() ,
            unique: true,
          
        ]
        ...

就像我为主密钥(名称)编写生成器一样,但这可能是不可能的。

【问题讨论】:

ydn.db-1.0.ts 仅包含定义列表,而不包含源代码。所以你还是要加载ydn.db-is-core-qry.js文件。 ydn.db-1.0.ts 是定义文件,我应该使用它来编写 TypeScript 代码。我相信此时我不需要那个文件 ydn.db-is-core-qry.js。 是的,您应该在文件///&lt;reference path="relative/path/to/ydn.db-1.0.ts" /&gt; 的顶部添加 TypeScript 代码以加载这些 TypeScript 定义,然后您可以使用文件中定义的类型。但是,您仍然需要在某些时候引用 .js 文件,否则它将无法在您的浏览器中运行。 是的,没错,但我认为这与问题无关。 【参考方案1】:

是的,这可以使用ydn-db.d.ts(来自DefiniteTyped)来解决。库 ydn.db-1.0.ts 已损坏(重复定义,而不是 boolean bool 被提及等)。对于库ydn-db.d.ts(来自DefiniteTyped),生成器被忽略了。使用 IndexSchemaJson 接口的扩展,我可以编写此代码,包括生成器:

/// <reference path="typings/ydn-db/ydn-db.d.ts" />
module YdnDbTest

  module DatabaseHelper
  
    interface Place
    
      Name: string;
      Location: string;
    

    interface IndexSchemaJsonB extends IndexSchemaJson
    
      generator?: (row: any) => any;
    

    var AppDatabaseSchema: DatabaseSchemaJson =
    
      stores:
      [
        
          name: "StoreA",
          keyPath: "Name",
          indexes:
          [
            <IndexSchemaJsonB>
            
              name: "idxLocation",
              keyPath: "Location",
              generator: (row: Place): string =>
                 return row.Location.toLocaleUpperCase(); 
            
          ]
        
      ]
       
 

【讨论】:

以上是关于YDN-DB 密钥生成器 TypeScript的主要内容,如果未能解决你的问题,请参考以下文章

在 ydn-db 中按多个字段搜索的最佳方法是啥?

YDN-DB中的简单搜索功能

使用 YDN-DB 的 IndexedDB:如何确定对象存储是不是存在

如何在 ydn-db 中实现内部连接?

在 ydn-db 中是不是可以进行多次搜索?

YDN-DB 仅从我的 IndexedDb 存储中获取前 100 行