2016-11-27 18 views
0

mongooseとtypescriptを使用してアプリケーションを構築しています。私が作ったシンプルなモデルです:Mongooseタイピングの問題の種類スクリプト

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 

タイピングは、スキーマのための作業を行うと、彼らは私が使用している他のすべてのライブラリに適しています。これらの型定義に何か問題がありますか?私は何か間違っているのですか?これは完全な例である

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; 

typescriptですを使用して、私も完全なプロジェクト例、Node.jsの、右ここ& passport.jsをマングース:https://github.com/thanhtruong0315/typescript-express-passportjs

幸運。

+0

私は、変数にインポートを割り当てたという事実がわかりました。 'Database.ts'で説明したのと似たアプローチを使って修正しましたので、あなたの答えは正しいです。ありがとう! – user5505266