Мне нужна помощь. Я создаю сущность пользователя с помощью typeorm и хочу перезаписать toResponseObject. в классе Customer для изменения возвращаемого атрибута, но когда я заканчиваю запись, возникает ошибка: «Тип» {userName: string; firstName: string; lastName: string; email: string; address: Address; token: string; }» отсутствует следующее свойства из типа «Пользователь»: пароль, hasPassword, toResponObject, comparePassword». Я предполагаю, что это означает, что я должен вернуть все свойства пользователя, но я не хочу возвращать все атрибуты. Что я должен делать?
user.entity.ts
import {PrimaryColumn, Column, BeforeInsert} from "typeorm";
import * as bcrypt from 'bcryptjs'
import * as jwt from 'jsonwebtoken'
export abstract class User {
@PrimaryColumn()
userName: string;
@Column()
password: string;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
email: string;
@BeforeInsert()
async hasPassword(){
this.password = await bcrypt.hash(this.password,10)
}
async toResponObject(showToken:boolean = true){
const {userName,firstName,lastName,email,token} = this
const responseObject = {userName,firstName,lastName,email,token}
if (showToken){
responseObject.token = token
}
return responseObject
}
async comparePassword(attemp:string){
return await bcrypt.compare(attemp,this.password)
}
protected get token(){
const {userName,password} = this
return jwt.sign({userName,password},process.env.SECRETKEY,{expiresIn:'7d'})
}
}
клиент.entity.ts
import { Pet } from "../pet/pet.entity";
import { Address } from "../address/address.entity";
import { Order } from "../order/order.entity";
import { Feedback } from "../feedback/feedback.entity";
import { User } from "../user/user.entity";
import { Entity, Column, ManyToOne, OneToMany } from "typeorm";
@Entity()
export class Customer extends User {
@Column()
phoneNumber: string;
@OneToMany(type => Pet,pet => pet.owner)
pets: Pet[];
@ManyToOne(type => Address)
address: Address;
@OneToMany(type => Order,order => order.customer)
orders: Order[];
@OneToMany(type => Feedback,feedbacks => feedbacks.customer)
feedbacks: Feedback[];
async toResponObject(showToken:boolean = true):Promise<User>{
const {userName,firstName,lastName,email,address,token} = this
const responseObject = {userName,firstName,lastName,email,address,token}
if (showToken){
responseObject.token = token
}
return responseObject // error ocuurs at this line
}
}
спасибо за ваше предложение: D это решение не работает для меня, потому что я понимаю, что эта проблема связана с типами объектов, которые я определяю для возврата в методе. Я попытался определить новый объект, который содержит атрибуты, которые я хочу вернуть, и это работает: D, но вы даете мне знания, которые я никогда не узнаю из typeORM. Спасибо большое
Здоровья дружище ?!!






Наряду с опасным комментарием вы можете просто вернуть часть пользователя, используя
async toResponObject(showToken:boolean = true):Promise<Partial<User>> {
//...
}
Таким образом, вам не нужно будет определять новый объект, и вы все равно сможете получить желаемый результат.
Посмотрите, поможет ли это: typeorm.io/#/выбрать-построитель запросов/скрытые столбцы