繰り返しコードをリファクタリングしようとしています。私は、Neo4jデータベース上のさまざまなタイプのノードを表すモデルクラスをたくさん持っています。クラスには、DB上のノードのタイプに対応するプロパティstatic label: string
があります。このラベルを使用してノードを取得し、適切なタイプのインスタンスを作成したいと考えています。静的プロパティへのアクセスを持つ一般的なファクトリ関数を作成する
私は作品(この例では単純化)このようなものがあります:
class record {
public static label: string;
public id: number;
}
class RecordType extends record {
label = "Some_DB_Label";
constructor(id: number) {
super()
this.id = id;
}
}
function DBService(klass) {
/* should work for all record subclasses each with different labels */
let label = klass.label;
/* use label to make db query gettig
getting records of type $label */
// create objects from returned information
let id = 10 //<- id from db
return new klass(id)
}
をこれのjavascriptの側が何らかのトラブルを持っていません - このコードは正常に動作します。私はちょうど:DBService(RecordType)
を呼ぶことができ、オブジェクトを得る。しかし、私はすべてのタイプチェックを外しています。
汎用入力をDBService
に追加したいと思います。
function DBServiceG<T>(klass: { new (id: number): T; }): T
が、その後私はもはや静的プロパティにアクセスすることができます:私は、このような一般的なため、署名にコンストラクタ関数を使用することができることを理解していません。静的プロパティをインスタンスの通常のプロパティにすることもできますが、インスタンスを作成して使用する必要があります。また、DBコールを作成するまではインスタンスを作成できません。
これは可能なようですが、わかりません。
だと思います。ありがとうございました。 –
あなたは大歓迎です。私はタイピングではあまり良くありませんが、これは確かに明らかでした。 – estus