student
というデータベーステーブルがあります。TypeScriptを使用してデータベースのスキーマとモデルをマッピングする方法は?
id | name | createdAt | deleted
--------------------------------
1 | foo | 2017-01-13 | false
データベースから値を取得するときに、正しい値にマッピングされた値が取得されます。私はこのテーブルのためのインタフェースを持っている:
interface Student {
id: number;
name: string;
createdAt: Date;
deleted: boolean;
}
私が何かやっているデータベースから値をつかむために:私はを参照するためにハードコードされた文字列を置換する方法を考えてい
await knex('student').where('deleted', false);
をテーブル/カラムのため、列の名前を変更/削除し、実行時ではなくコンパイル時に問題を検出することができます。
const tables = { student: 'student' };
const cols = {
id: 'id',
name: 'name',
createdAt: 'createdAt',
deleted: 'deleted',
};
await knex(tables.student).where(cols.deleted, false);
のようなオブジェクトを作成しました。しかし、このアプローチの問題は、誰かがモデルインターフェース(Student
)を変更してcolsオブジェクトの変更を忘れると、コンパイル時にはまだ動作するということです。
const cols: Student
を実行すると、すべての列が検証されますが、cols
オブジェクトのすべての列の型は文字列である必要があります。
これを行う方法はありますか?多分、このラインから、あるいはまったく別のアプローチで?
、メタデータクラス(ES)における単一のポイントになります私は」なかったのその機能について知っている。それがまさに私が必要なものです。甘い! – BrunoLM
これについてはこちらをご覧ください:https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript –