2016-11-27 7 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 속성이 없습니다. 내가 몽구스를 아무에게 던질 때이 멤버들을 사용하면 잘 작동합니다. 타이핑 문제 인 것 같습니다. typings는 스키마에 대한 작동합니까 그들은 내가 사용하는 다른 모든 라이브러리에 대한 좋은

npm install @types/mongoose --save 

:

나는 몽구스 입력과 같이 설치되어 있어야합니다. 이 유형 정의에 문제가 있습니까? 내가 뭔가 잘못하고 있는거야? 이것은 전체 예제입니다

npm install @typings/mongoose --save 

:

답변

1

[email protected] 를 들어 당신이

npm install @types/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