我搜索瞭如何使用Bookshelfjs以打字稿的例子網頁,有沒有文章或博客文章,可以幫助。我確實在github上發現了作爲DefinatelyTyped test file的一部分的測試,這是一個很好的起點。此外,很可能您希望將每個模型存儲在自己的文件中,這需要Bookshelfjs註冊表插件。 This article解釋了爲什麼,但在常規JavaScript的上下文中。
把它放在一起,假設您已正確安裝knexjs和bookshelfjs的打字。使用你的代碼爲靈感,進一步閱讀:
你可能已經被稱爲「Config.ts」有你的所有數據庫的詳細信息中有一個文件:
import * as Knex from 'knex';
import * as Bookshelf from 'bookshelf';
export class Config {
private static _knex:Knex = Knex({
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test',
charset : 'utf8'
}
});
private static bookshelf:Bookshelf = Bookshelf(Config.knex);
public static bookshelf(): Bookshelf {
Config.bookshelf.plugin('registry');
return Config._bookshelf;
}
}
你可能有一個提起所謂的「Blog.ts 「舉行博客模式(和另一個稱爲」郵政。TS」擔任此職的模型):
import {Config} from './Config';
import {Post} from './Post';
export class Blog extends Config.bookshelf.Model<Blog>
{
get tableName() { return 'books'; }
// strongly typed model properties linked to columns in table
public get BlogId(): number {return this.get('id');}
public set BlogId(value: number) {this.set({id: value})}
public get Name(): string {return this.get('name');}
public set Name(value: string) {this.set({name: value});}
posts(): Bookshelf.Collection<Post> {
return this.hasMany(Post);
}
}
module.exports = Server.bookshelf.model('Blog', Blog);
而在你的‘App.ts’文件中,可以運行您的代碼如下所示:
import {Config} from './Config';
import {Blog} from './Blog';
var blog = new Blog();
blog.set({ Name : "My new blog", BlogId : 1 });
.save();
我沒有測試代碼在這裏等我可能會有一些小的拼寫錯誤,但你明白了,請注意,我已經對類屬性使用了標題大小寫,但是我已經使用了數據庫字段的snake case。對於書架來說,開箱即用的命名約定必須遵守就像每個表被稱爲'id'的Id字段,關係的外鍵具有單一的表名稱版本(例如,對於用戶表,表中的Id將是'id',但登錄表中的外鍵將會是'user_id')。
無論如何,最好的方法是弄清楚如何使用Bookshelfjs和TypeScript思想(鑑於缺乏有關該主題的文檔),將結合DefinatelyTyped typedef書架來看看Bookshelfjs文檔。 .ts文件。
我不使用Typescript,但有一個bookhelf和Knex的定義,您可以使用[tsd](https://www.npmjs.com/package/tsd)來管理/安裝這些定義。一旦安裝,一個體面的代碼編輯器將使用自動完成和文檔的定義(例如Visual Studio Code)。 – Shanoor