title: typescript with mongoose: cannot read property 'CasterConstructor' of undefined
body: <p>I am writing a node.js application using typescript and mongoose.  I am using the typescript model approach and continue to receive "cannot read property CasterConstructor' of undefined" when I call the create method to create a new subdocument.  An example of the code is outlined below:</p>
  
  <pre><code>seat.ts:
  export let SeatSchema: Schema = new Schema({
      travelerId: {type: Schema.Types.ObjectId, required: true},
      seatClass: {type: Schema.Types.String, minlength: 5, maxlength:10, required: true, enum: [“FirstClass”, “Coach”]},
      row: {type: Schema.Types.Number, required: true},
      section: {type: Schema.Types.Number, required: true},
      hasBoarded: {type: Schema.Types.Boolean, required: false}
  });
  
  
  plane.ts:
  export let PlaneSchema: Schema = new Schema({
      manufacturer: {type: Schema.Types.String, required: true},
      seatsChart: [SeatSchema],
      routeId: [{type: Schema.Types.ObjectId, ref: ‘routes’, required: true}];
  
  iseat.ts: 
  export interface ISeat {
      travelerId: string,
      seatClass: string,
      row: number,
      section: number,
      hasBoarded: boolean
  }
  
  
  iplane.ts:
  export interface IPlane {
      manufacturer: string,
      seatsChart: Types.DocumentArray&lt;ISeatModel&gt;,
      routeId: [string]
  }
  
  iseatmodel.ts:
  export interface ISeatModel extends ISeat, Subdocument {
  }
  
  iplanemodel.ts:
  export interface IPlaneModel extends IPlane, Document {
  }
  
  planerepository.ts:
  constructor(db) {
      this._model: Model&lt;IPlaneModel&gt; = db.model&lt;IPlaneModel&gt;(“Plane”, PlaneSchema);
  }
  .
  .
  .
  addNewSeat(planeId: string, seat: ISeat) {
      let plane: IPlaneModel = await this._model.findById(planeId);
      let newSeat: ISeatModel = plane.SeatsChart.create(seatAttributes);
      plane.seatsChart.push(newSeat);
      let planeUpdated: IPlane = await plane.save();
  }
  </code></pre>
  
  <p>This is the error I keep receiving:
  TypeError: Cannot read property 'casterConstructor' of undefined
      at Array.create (/node_modules/mongoose/lib/types/documentarray.js:236:35)
          .
          .
          .
          .
          .</p>
  
  <p>I am not seeing what I could be missing.  Could someone please review and let me know what I could be missing and if this is the right approach altogether.  </p>
  
  <p><strong>Update:</strong> After I switched to using push, the problem seems to be in /mongoose/lib/types/array.js, _checkManualPopulation:</p>
  
  <pre><code>function _checkManualPopulation(arr, docs) {
    var ref = arr._schema.caster.options &amp;&amp; arr._schema.caster.options.ref;
    if (arr.length === 0 &amp;&amp;
        docs.length &gt; 0) {
      if (_isAllSubdocs(docs, ref)) {
        arr._parent.populated(arr._path, [], { model: docs[0].constructor });
      }
    }
  }
  </code></pre>
  
  <p>For some reason, the _schema object is undefined when push gets called which results in the exception.  I am not sure if this is a bug or if something else is not getting called that would otherwise initialize the _schema property?</p>