npm install mongoose-class --save
npm install @types/mongoose @types/mongodb --save-dev
./models/User.ts
/**
 * User model
 * @module User
 */
import { Model as MongooseModel } from 'mongoose';
import { Model, Column } from '../lib/mongoose-class';
@Model({
  indexes: [ { name: 1, age: -1} ],
  options: { collection: 'user'},
  beforeCreate: schema => {
    schema.virtual('capitalizedName').get(function () {
      return this.name.toUpperCase();
    });
  }
})
export class User extends MongooseModel {
  @Column({ type: String, index: true })
  name: string;
  @Column(Number)
  age: number;
  static list(callback?: Function) {
    return this.find().exec(callback);
  }
  greet() {
    return 'Hello, my name is ' + this.name;
  }
}
./index.ts
import { User } from './models/User';
const user = new User({ name: 'Pepe', age: 34, nosale: 33});
User.find({}).exec((err, data) => {
    console.log('find', err, data);
});
User.list().then(users => {
    console.log('list', users);
});
console.log(user);
console.log(user.greet());