Как получить интерфейс модели класса goose - PullRequest
0 голосов
/ 01 мая 2020

Я хочу создать абстракцию для функций модели Mon go. И в поисках, как повторно использовать интерфейс модели из типа goose class.

Я хочу иметь такую ​​функцию, как:

import CountryModel, { Country } from '../../models/country/CountryModel'

export async function saveCountry(country: Country): Promise<Country> {
  try {
    const res = await new CountryModel(country).save()

    return res.toObject()
  } catch (err) {
    console.log('Failed save country', country)
    throw err
  }
}

CountryModel:

import mongoose from 'mongoose'
import { prop, Typegoose } from 'typegoose'

export class Country extends Typegoose {
  @prop({ required: true })
  name!: string

  @prop()
  code?: string

  @prop()
  flag?: string
}

const CountryModel = new Country().getModelForClass(Country, {
    existingMongoose: mongoose,
    schemaOptions: {collection: 'country'}
})

export default CountryModel

, но когда попробуйте передать объект { name : 'country name', code: 'code', fag: 'flag' } в saveCountry функцию Я получил ошибку:

2345: Аргумент типа '{name: string; код: строка; флаг: строка; } 'нельзя назначить параметру типа' ... ing; } 'отсутствуют следующие свойства из типа' Страна ': getModelForClass, setModelForClass, buildSchema

1 Ответ

1 голос
/ 01 мая 2020

простое и ленивое исправление будет saveCountry(country: Paritial<CountryClass>)

, более сложный (но правильный) способ будет отфильтровывать все доступные только для чтения свойства (геттеры) и функции из ключей и использовать его как POJO

-> PR 241 типа goose в настоящее время работает по такому способу

...