Переопределить функцию findAll класса Sequelize Model, используя машинопись - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь создать заглушку класса Sequelize Model, чтобы можно было выполнять внедрение зависимостей для модульного тестирования.Однако у меня возникают проблемы с поиском правильных параметров шаблона, чтобы он работал.

Пока у меня есть следующее:

class ModelStub extends Model {
    public static findAll<M extends Model>(this: (new () => M) & typeof Model, options?: FindOptions): Bluebird<M[]> {
        return super.findAll.call(this, options);
    }
}

, которое выдает мне следующее сообщение об ошибке:

error TS2417: Class static side 'typeof ModelStub' incorrectly extends base class static side 'typeof Model'. 
  Types of property 'findAll' are incompatible.
    Type '<M extends import("C:/Users/CMalek/Desktop/Web-Server/node_modules/sequelize/types/lib/model").Model<any, any>>(this: (new () => M) & typeof import("C:/Users/CMalek/Desktop/Web-Server/node_modules/sequelize/types/lib/model").Model, options?: import("C:/Users/CMalek/Desktop/Web-Server/node_modules/sequelize/types/lib...' is not assignable to type '<M extends import("C:/Users/CMalek/Desktop/Web-Server/node_modules/sequelize/types/lib/model").Model<any, any>>(this: (new () => M) & typeof import("C:/Users/CMalek/Desktop/Web-Server/node_modules/sequelize/types/lib/model").Model, options?: import("C:/Users/CMalek/Desktop/Web-Server/node_modules/sequelize/types/lib...'. Two different types with this name exist, but they are unrelated.
      Type 'Bluebird<Model<unknown, unknown>[]>' is not assignable to type 'Bluebird<M[]>'.
        Types of property 'then' are incompatible.
          Type '{ <U>(onFulfill?: (value: Model<unknown, unknown>[]) => Resolvable<U>, onReject?: (error: any) => Resolvable<U>): Bluebird<U>; <TResult1 = Model<unknown, unknown>[], TResult2 = never>(onfulfilled?: (value: Model<unknown, unknown>[]) => Resolvable<TResult1>, onrejected?: (reason: any) => Resolvable<...>): Bluebird<.....' is not assignable to type '{ <U>(onFulfill?: (value: M[]) => Resolvable<U>, onReject?: (error: any) => Resolvable<U>): Bluebird<U>; <TResult1 = M[], TResult2 = never>(onfulfilled?: (value: M[]) => Resolvable<TResult1>, onrejected?: (reason: any) => Resolvable<...>): Bluebird<...>; }'.
            Types of parameters 'onFulfill' and 'onFulfill' are incompatible.
              Types of parameters 'value' and 'value' are incompatible.
                Type 'Model<unknown, unknown>[]' is not assignable to type 'M[]'.
                  Type 'Model<unknown, unknown>' is not assignable to type 'M'.
                    'Model<unknown, unknown>' is assignable to the constraint of type 'M', but 'M' could be instantiated with a different subtype of constraint 'Model<any, any>'.

Я новичок в Typescript, поэтому я не уверен, как создать мост между Model<unknown, unknown> and Model<any, any>?

В худшем случае я, конечно, мог бы создать свой собственный класс для переносаВместо этого добавьте в кавычки и создайте заглушку, но я бы предпочел не добавлять дополнительный слой кода.

Любая помощь приветствуется.

...