2016-11-27 63 views
0

我正在使用貓鼬和打字稿構建一個應用程序。這是一個簡單的模型,我做了:與打字稿的貓鼬打字問題

import * as callbackMongoose from 'mongoose'; 
var mongoose = callbackMongoose; 
mongoose.Promise = global.Promise; 
const Schema = mongoose.Schema; 

var userSchema = new Schema({ 
    username: String, 
    email: String, 
    hash: String 
}); 

export default mongoose.model('User', userSchema); 

它運作良好,但我需要在訪問屬性之前將每個文檔轉換爲任何文件。我讀了指南,說我可以這樣做:

interface IUser extends mongoose.Document { 
    username: String; 
    email: String; 
    hash: String; 
} 

export default mongoose.model<IUser>('User', userSchema); 

我的問題是,貓鼬型似乎並不具有這樣的性質Document。它也沒有財產ObjectId。當我把貓鼬投入任何一個,並使用這些成員時,它的工作很好。這似乎是一個打字問題。

我安裝的是貓鼬打字像這樣:

npm install @types/mongoose --save 

的分型做工作的模式和他們是很好的,我才使用其他庫。這些類型定義有問題嗎?難道我做錯了什麼?

回答

1

對於[email protected] 我想你可以使用

npm install @types/mongoose --save 

代替:

npm install @typings/mongoose --save 

這是完整的例子:

Database.ts

import mongoose = require('mongoose'); 

mongoose.Promise = global.Promise; 

mongoose.connect('mongodb://admin:[email protected]:49437/samples'); 

export { mongoose }; 

UserData.ts

import { mongoose } from './../../Services/Database'; 

export interface UserData { 
    is_temporary: boolean; 
    is_verified: boolean; 
    status: boolean; 
    username: string; 
} 

export interface IUserData extends UserData, mongoose.Document, mongoose.PassportLocalDocument { }; 

UserModel.ts

import { IUserData } from './UserData'; 
import { mongoose } from './../../Services/Database'; 

import * as passportLocalMongoose from 'passport-local-mongoose'; 
import Schema = mongoose.Schema; 


const UserSchema = new Schema({ 
    username: { type: String, required: true }, 
    password: String, 
    status: { type: Boolean, required: true }, 
    is_verified: { type: Boolean, required: true }, 
    is_temporary: { type: Boolean, required: true } 
}); 

UserSchema.plugin(passportLocalMongoose); 

var UserModel; 
try { 
    // Throws an error if 'Name' hasn't been registered 
    UserModel = mongoose.model('User') 
} catch (e) { 
    UserModel = mongoose.model<IUserData>('User', UserSchema); 
} 

export = UserModel; 

我也充滿項目例如使用打字稿,Node.js的,貓鼬& passport.js就在這裏:https://github.com/thanhtruong0315/typescript-express-passportjs

祝你好運。

+0

事實證明,這個問題是由於我將導入分配給了一個變量。我使用類似於你在'Database.ts'中描述的方法修復它,所以你的答案是正確的。謝謝! – user5505266