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 (DefiniteTyped からダウンロード)を使用して、このジェネレーターを定義できますか?

たとえば、次の 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,
            }
          ]
        }
      ]
   }
 }

、そして、ジェネレーターを書いた場所を希望します。次のようなものを書きたいと思います:

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

マスターキー(名前)のジェネレーターを書いたように、おそらく不可能です。

4

1 に答える 1

0

はい、これは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(); }
            }
          ]
        }
      ]
   }    
 }

}

于 2016-02-02T14:51:54.447 に答える