首页 > 解决方案 > 如何为打字稿泛型指定“this”

问题描述

我正在尝试制作一个实用函数来自动为提供给它的模型生成分页,如下所示:

import { Model } from 'sequelize-typescript';

async function getPagination<T extends typeof Model>(model: T) {
  const page = 1;
  const limit = 10;
  const data = await model.findAndCountAll({
    limit,
    offset: (page - 1) * limit,
  });

  // Create the pagination object
  const pagination = {}; // some meaningful object

  return {
      data,
      pagination
  };
}

但是打字稿给了我这个错误:

The 'this' context of type 'T' is not assignable to method's 'this' of type 'ModelStatic<Model<unknown, unknown>>'. Type 'typeof Model' is not assignable to type 'ModelStatic<Model<unknown, unknown>>'. Cannot assign an abstract constructor type to a non-abstract constructor type.

顺便说一句,我的模型是这样定义的:

import { Table, Column, PrimaryKey, AutoIncrement, Model } from 'sequelize-typescript'

@Table
class CustomModel extends Model implements CustomModel {

  @PrimaryKey
  @AutoIncrement
  @Column
  id!: number;

}

标签: typescriptsequelize-typescript

解决方案


我终于让它工作了,实际上我不得不传递泛型,而不是使用泛型本身,它将模型扩展到 ModelCtor,这就是在 sequelize 中完成的事情,我猜。

async function getPagination<T extends Model>(model: ModelCtor<T>)

推荐阅读