打字稿的猫鼬打字问题
Mongoose typing issue with 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);
它运行良好,但我需要在访问属性之前将每个文档转换为 any。我读了一篇指南,说我可以这样做:
interface IUser extends mongoose.Document {
username: String;
email: String;
hash: String;
}
export default mongoose.model<IUser>('User', userSchema);
我的问题是 mongoose 类型似乎没有 属性 Document
。它也没有 属性 ObjectId
。当我将 mongoose 投射到 any 并使用这些成员时,它工作得很好。这似乎是一个打字问题。
我像这样安装了 mongoose typing:
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
祝你好运。
我正在使用猫鼬和打字稿构建一个应用程序。这是我制作的一个简单模型:
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);
它运行良好,但我需要在访问属性之前将每个文档转换为 any。我读了一篇指南,说我可以这样做:
interface IUser extends mongoose.Document {
username: String;
email: String;
hash: String;
}
export default mongoose.model<IUser>('User', userSchema);
我的问题是 mongoose 类型似乎没有 属性 Document
。它也没有 属性 ObjectId
。当我将 mongoose 投射到 any 并使用这些成员时,它工作得很好。这似乎是一个打字问题。
我像这样安装了 mongoose typing:
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
祝你好运。