使用打字稿扩展书架模型会导致错误

Extending bookshelf model with typescript causes error

我在配置文件中像这样实例化了书架:

// irrelevant code omitted
const knex = Knex(knexfile[env]);

const bookshelf = Bookshelf(knex as any);

const { Model } = bookshelf;

export default Model;
export { bookshelf };

这很好用;所有进口解决和出口工作。我创建了一个这样的模型:

import Model from '../config/bookshelf';

class Module extends Model<{id:number}> {
  table = 'modules';

  get tableName() { return this.table; }
}

但是,我从 TypeScript 收到一个错误,说 Type '{ id: string; }' is missing the following properties from type 'Model<any>': belongsTo, belongsToMany, count, destroy, and 41 more. 似乎 TypeScript 期望我为模型提供的类型必须定义它扩展的模型 class 上的所有方法,但是这似乎与 this Whosebug post and the DefinitelyTyped example 不一致。关于如何在不向我的模型类型中添加所有 40 多种方法的情况下解决这个问题的想法?

提前致谢!

您需要创建一个新的 class 来扩展 bookshelf.Model<class>:

class Module extends Model<Module> {
    table = 'modules';
    public id: number = 0;

    get tableName() { return this.table; }
}

Playground

Though this is rather interresting TypeScript Support