Как извлечь машинописный мангуст / тип goose схема - PullRequest
0 голосов
/ 14 февраля 2020

Здесь заявленная схема

class AccountSchema;

Здесь заявленная модель

const AccountClass: Model<AccountSchema & Document>;
class Account extends AccountClass;

Почему это не работает?

type ExtractSchema<T extends Model<Document>> = T extends Model<infer D & Document> ? D : never;
class Service<T extends Model<ExtractSchema<T> & Document>> {
  public async getSchema(): ExtractSchema<T>;
}
class AccountService extends Service<typeof Account> {
  public test() {
   [ERROR: this.getSchema() returns never]
   this.getSchema()
  }
}

Как лучше всего извлечь схему с использованием обобщений и есть ли способ не включать javascript функции получения и установки, просто поле?

1 Ответ

0 голосов
/ 03 марта 2020

Когда вы используете тип goose или mon goose, должно работать следующее

class Service<T extends Model<ExtractSchema<T> & Document>> {
  public async getSchema(): ExtractSchema<T> {
   return this.schema; 
  }
}

this.schema вернет схему при вызове функции из документа, в противном случае вам нужно будет установить static слово, чтобы сделать его статической c функцией (вызываемой из модели)

как для типов, вы должны использовать mongoose.Schema<typeof YourClass> в качестве возвращаемого типа для getSchema в противном случае возвращаемый тип будет моделью (которой нет во время выполнения)

...