簡體   English   中英

使用打字稿的Mongoose輸入問題

[英]Mongoose typing issue with typescript

我正在使用mongoose和typescript構建一個應用程序。 這是我制作的簡單模型:

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);

我的問題是類型mongoose似乎沒有屬性Document 它也沒有ObjectId屬性。 當我把貓鼬投到任何人並使用這些成員時它工作得很好。 這似乎是打字問題。

我像這樣安裝了貓鼬類型:

npm install @types/mongoose --save

這些類型適用於Schema,它們適用於我使用的所有其他庫。 這些類型定義有問題嗎? 難道我做錯了什么?

對於TypeScript@2.0,我想你可以使用

npm install @types/mongoose --save

代替:

npm install @typings/mongoose --save

這是完整的例子:

Database.ts

import mongoose = require('mongoose');

mongoose.Promise = global.Promise;

mongoose.connect('mongodb://admin:123456@ds149437.mlab.com: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,mongoose和passport.js的完整項目示例: https//github.com/thanhtruong0315/typescript-express-passportjs

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM