LoginSignup
18
16

More than 5 years have passed since last update.

TypeScriptでmongoose と戦う日記 #1 モデルの独自定義

Last updated at Posted at 2014-09-05

まえおき

TypeScriptの世界に最近飛び込みました。まともにNode触った事無いので色々勉強中ですが、目下の所猛獣mongooseとの戦いが辛いので備忘録として書きます。
TypeScriptを勉強しながらなので、mongooseというかTypeScriptがムズイのかもしれません。

とりあえずユーザーモデル作る

d.ts読み込み等は省略してあります。

import mongoose = require('mongoose');

//スキーマ作る
var userSchema:mongoose.Schema = new mongoose.Schema({name:String, age:Number});
//モデル作る
var userModel:mongoose.Model<mongoose.Document> = mongoose.model('User', userSchema);

//モデルのインスタンス作る
var user:mongoose.Document = new userModel({name:'orzngo', age:17});

注意する点は、mongoose.Modelをnewした結果はTであるという事です。これがよくわかんなくてかなり悩みました。
ただし、このままだとDocument型がそのまま返ってくる形になる為、ぼくがuserSchemaで定義したnameとageが取れません。

Documentを拡張する

mongoose.Documentを継承したインターフェース、UserDocumentを定義しました。


interface UserDocument extends Document{
    name:String;
    age:Number;
}

これを参照出来るようにした上で、インポート等でコードを少し見やすくした物が以下になります。


import mongoose = require('mongoose');
import Schema = mongoose.Schema;
import Document = mongoose.Document;
import Model = mongoose.Model;

//スキーマ定義する
var userSchema:Schema = new Schema({name:String, age:Number});

//モデル作る
var userModel:Model<UserDocument> =  <Model<UserDocument>>mongoose.model('User', userSchema);

//モデルからドキュメントを作る
var user:UserDocument = new userModel({name:'ORZNGO', age:17});

console.log(user.name);//ORZNGO

やっとこさコンパイルが通りました。interfaceが読めてれば、きちんと補完もしてくれます。
スクリーンショット 2014-09-05 22.11.13.png

ひとまずできた

とりあえず独自モデルを定義する所までようやくこぎ着けました。1週間くらいかかったかもしれません。
初めてQiitaに記事を書いたのですが、これからも勉強の為にいろいろ書いていこうと思います。

追記1

mongooseをやっつけたと思ったら、sequelizeでも同じような事をしています。
http://qiita.com/orzngo/items/186d700de481cc23c055

18
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
16