2015-02-07 5 views
11

w jaki sposób mogę używać klas i interfejsów do pisania typowanych modeli i schematów w Maszynopisie używając zdecydowanie.klasy i interfejsy do pisania typowanych modeli i schematów Mongoose w Maszynopisie przy użyciu zdecydowanie wpisanego

import mongoose = require("mongoose"); 

//how can I use a class for the schema and model so I can new up 
export interface IUser extends mongoose.Document { 
name: String; 
} 

export class UserSchema{ 
name: String; 
} 




var userSchema = new mongoose.Schema({ 
name: String 
}); 
export var User = mongoose.model<IUser>('user', userSchema); 

Odpowiedz

16

To jak to zrobić:

  1. Definiowanie maszynopis klasę który określi naszą logikę.
  2. Definiowanie interfejsu (którego nazwa dokumentu): jest to rodzaj mongoose będzie współdziałać z
  3. Zdefiniowanie modelu (będziemy mogli znaleźć, INSERT, UPDATE ...)

w kodzie:

import { Document, Schema, model } from 'mongoose' 

// 1) CLASS 
export class User { 
    name: string 
    mail: string 

    constructor(data: { 
    mail: string 
    pass: string 
    }) { 
    this.mail = data.mail 
    this.name = data.name 
    } 

    /* any method would be defined here*/ 
    foo(): string { 
    return this.name.uppercase() // whatever 
    } 
} 

// no necessary to export the schema (keep it private to the module) 
var schema = new Schema({ 
    mail: { required: true, type: String }, 
    name: { required: false, type: String } 
}) 
// register each method at schema 
schema.method('foo', User.prototype.foo) 

// 2) Document 
export interface UserDocument extends User, Document { } 

// 3) MODEL 
export const Users = model<UserDocument>('User', schema) 

Jak tego używać? wyobraźmy sobie, że kod jest przechowywany w user.ts, teraz byłbyś w stanie wykonać następujące czynności:

import { User, UserDocument, Users } from 'user' 

let myUser = new User({ name: 'a', mail: '[email protected]' }) 
Users.create(myUser, (err: any, doc: UserDocument) => { 
    if (err) { ... } 
    console.log(doc._id) // id at DB 
    console.log(doc.name) // a 
    doc.foo() // works :) 
}) 
+0

dzięki To jest naprawdę pomocne – afaayerhan

+0

Jak radzić sobie z 'id'? Myślę, że powinno to być częścią klasy User, ale nie byłbyś w stanie dziedziczyć po 'mongoose.Document' –

+0

Deklarowany na UserDocument już – Manu

Powiązane problemy