0

我想使用 TypeScript 创建一个数据库模式。这很简单,但我不能或不知道如何定义密钥生成器。例如,在用户指南中,这样的代码片段(使用 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(从 DefinedlyTyped 下载)来定义这个生成器吗?

例如我写了这个 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,
          }
        ]
        ...

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

4

1 回答 1

0

是的,这可以使用ydn-db.d.ts(来自 distinctlyTyped)来解决。库ydn.db-1.0.ts已损坏(重复定义,而不是 boolean bool 被提及等)。对于ydn-db.d.ts库(来自definitelyTyped),生成器被忽略了。使用 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(); }
            }
          ]
        }
      ]
   }    
 }

}

于 2016-02-02T14:51:54.447 回答