В типе отсутствуют следующие свойства

Мне нужна помощь. Я создаю сущность пользователя с помощью 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
    }

}

Посмотрите, поможет ли это: typeorm.io/#/выбрать-построитель запросов/скрытые столбцы

hazardous 22.04.2019 10:35

спасибо за ваше предложение: D это решение не работает для меня, потому что я понимаю, что эта проблема связана с типами объектов, которые я определяю для возврата в методе. Я попытался определить новый объект, который содержит атрибуты, которые я хочу вернуть, и это работает: D, но вы даете мне знания, которые я никогда не узнаю из typeORM. Спасибо большое

S T Y X K 22.04.2019 15:55

Здоровья дружище ?!!

hazardous 22.04.2019 18:54
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
4
3
7 266
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наряду с опасным комментарием вы можете просто вернуть часть пользователя, используя

async toResponObject(showToken:boolean = true):Promise<Partial<User>> {
  //...
}

Таким образом, вам не нужно будет определять новый объект, и вы все равно сможете получить желаемый результат.

Другие вопросы по теме