1. ホーム
  2. javascript

[解決済み] Typescript流のMongoose...?

2022-05-13 17:56:25

質問

MongooseモデルをTypescriptで実装しようとしています。 Googleで調べても、ハイブリッドなアプローチ(JSとTSの組み合わせ)しか出てきません。 私の素朴なアプローチでは、JSなしでUserクラスを実装するにはどうしたらよいでしょうか?

荷物なしでIUserModelをできるようにしたいです。

import {IUser} from './user.ts';
import {Document, Schema, Model} from 'mongoose';

// mixing in a couple of interfaces
interface IUserDocument extends IUser,  Document {}

// mongoose, why oh why '[String]' 
// TODO: investigate out why mongoose needs its own data types
let userSchema: Schema = new Schema({
  userName  : String,
  password  : String,
  firstName : String,
  lastName  : String,
  email     : String,
  activated : Boolean,
  roles     : [String]
});

// interface we want to code to?
export interface IUserModel extends Model<IUserDocument> {/* any custom methods here */}

// stumped here
export class User {
  constructor() {}
}

どのように解決するのですか?

私のやり方はこうです。

export interface IUser extends mongoose.Document {
  name: string; 
  somethingElse?: number; 
};

export const UserSchema = new mongoose.Schema({
  name: {type:String, required: true},
  somethingElse: Number,
});

const User = mongoose.model<IUser>('User', UserSchema);
export default User;