Литерал объекта может указывать только известные свойства - не существует в типе SaveOptions. - PullRequest
0 голосов
/ 07 августа 2020

Я использую graphQL Apollo, Postgres, Express. js для создания небольшого веб-сайта. Я выбираю существующий profile и хочу обновить его firstName и lastName

Мой код

  const profile = await Profile.findOne({where: { user: payload!.userId}}) 
  if (profile) {
    console.log(profile) <-- It returns correctly the profile I am looking for
    await profile.save({
      firstName, <-- Error here
      lastName
    })

Однако я получаю следующая ошибка:

Аргумент типа '{firstName: string; lastName: строка; } 'не может быть назначен параметру типа' SaveOptions '. Литерал объекта может указывать только известные свойства, а 'firstName' не существует в типе 'SaveOptions'. Ts (2345)

Ошибка: https://imgur.com/a/Khdn6LH

Я думаю, что проблема в типе профиля, который равен Profile | не определено . Где Профиль выводится из сущности typeORM:

@ObjectType()
@Entity("profile")
export class Profile extends BaseEntity{

    @Field(()=>String)
    @Column({ nullable: true }) 
    firstName: string;
    
    @Field(()=>String)
    @Column({ nullable: true }) 
    lastName: string;
}

1 Ответ

0 голосов
/ 07 августа 2020

При быстром взгляде на их документы мне кажется, что save не принимает новые данные в качестве входных.

Скорее они изменяют объект напрямую (так profile.firstName = firstName), а затем вызывают сохранить без аргументов.

Аргумент для сохранения предназначен для SaveOptions, которые настраивают, как должно выполняться сохранение, см. здесь: https://typeorm.delightful.studio/interfaces/_repository_saveoptions_.saveoptions.html

Итак, TypeScript говорит, что свойство firstName не существует в SaveOptions (что верно), и это то, что вы передаете функции сохранения, которая ожидает действительный объект SaveOptions.

...