Я пытаюсь расширить класс Typescript, сгенерированный Prisma , чтобы я мог добавить некоторые дополнительные функции. Генерация кода создает интерфейс, который описывает все члены класса следующим образом:
export interface Prisma {
user(id: string) => User
}
Реализация этого интерфейса генерируется следующим образом:
export interface ClientConstructor<T> {
new (args?: MyArgs): T;
};
export function makePrismaClientClass<T>(args: MyArgs): T {
return class Client : BaseClass {
constructor(args: MyArgs) {
super(args)
}
} as any
};
export const Prisma = makePrismaClientClass<ClientConstructor<Prisma>>(args);
Что означает, что я могу использовать следующее код для получения пользователя
const db = new Prisma();
const user = db.user('user_id');
Я бы хотел расширить поведение этого класса, поэтому я написал следующее:
class MyPrisma extends Prisma {
constructor(args?: MyArgs) {
super(args);
}
}
Теперь я могу сделать
const db = new MyPrisma();
const user = db.user('user_id');
И получите список пользователей. Однако если я попытаюсь изменить переопределение метода user
(даже не меняя ничего) следующим образом:
class MyPrisma extends Prisma {
constructor(args?: MyArgs) {
super(args);
}
user = (id: string) => {
super.user(id);
}
}
при вызове db.user
, теперь я получаю ошибку во время выполнения TypeError: (intermediate value).user is not a function
- предположительно потому, что user
не существует для типа ClientConstructor
.
Можно ли как-нибудь заставить мой класс расширить класс, возвращаемый makePrismaClientClass
, а не ClientConstructor
?