diff --git a/mongoose-sequence/mongoose-sequence-tests.ts b/mongoose-sequence/mongoose-sequence-tests.ts
new file mode 100644
index 0000000000..7962afeeb4
--- /dev/null
+++ b/mongoose-sequence/mongoose-sequence-tests.ts
@@ -0,0 +1,52 @@
+///
+///
+///
+
+/**
+ * Based on the examples on: https://github.com/ramiel/mongoose-sequence
+ * Created by Linus Brolin .
+ */
+
+import { SequenceDocument, SequenceOptions, SequenceSchema, Document, Schema, Model, model } from 'mongoose';
+import * as mongooseSequence from 'mongoose-sequence';
+
+//#region Test Models
+interface User extends SequenceDocument {
+ name: string;
+ country: string;
+ city: string;
+ inhabitant_number: number;
+}
+
+const UserSchema: SequenceSchema = new Schema({
+ name: String,
+ country: String,
+ city: String,
+ inhabitant_number: Number
+});
+
+let seqOpts: SequenceOptions = { id: 'inhabitant_seq', inc_field: 'inhabitant_number', reference_fields: ['country', 'city'] };
+UserSchema.plugin(mongooseSequence, seqOpts);
+
+let UserModel: Model = model('User', UserSchema);
+//#endregion
+
+//#region Test Sequence
+let user: User = new UserModel({
+ name: 'Patrice',
+ country: 'France',
+ city: 'Paris'
+});
+user.save();
+console.log(user.inhabitant_number);
+
+user.setNext('inhabitant_seq', function(err: any, user: User) {
+ if (err) {
+ console.log(err);
+ return;
+ }
+ if (user) {
+ console.log(user.inhabitant_number);
+ }
+});
+//#endregion
diff --git a/mongoose-sequence/mongoose-sequence.d.ts b/mongoose-sequence/mongoose-sequence.d.ts
new file mode 100644
index 0000000000..b0dec033bd
--- /dev/null
+++ b/mongoose-sequence/mongoose-sequence.d.ts
@@ -0,0 +1,36 @@
+// Type definitions for mongoose-sequence 3.0.2
+// Project: https://github.com/ramiel/mongoose-sequence
+// Definitions by: Linus Brolin
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+declare module 'mongoose' {
+ export interface SequenceOptions {
+ inc_field: string; // The name of the field to increment. Mandatory, default is _id
+ id?: string; // Id of the sequence. Is mandatory only for scoped sequences but its use is strongly encouraged.
+ reference_fields?: Array; // The field to reference for a scoped counter. Optional
+ disable_hooks?: boolean; // If true, the counter will not be incremented on saving a new document. Default to false
+ collection_name?: string; // By default the collection name to mantain the status of the counters is counters. You can override it using this option
+ }
+
+ export interface SequenceDocument extends Document {
+ setNext(sequenceId: string, callback: (err: any, res: SequenceDocument) => void): void;
+ }
+
+ export interface SequenceSchema extends Schema {
+ plugin(
+ plugin: (schema: SequenceSchema, options: SequenceOptions) => void,
+ options: SequenceOptions
+ ): this;
+
+ // overload for the default mongoose plugin function
+ plugin(plugin: (schema: Schema, options?: Object) => void, opts?: Object): this;
+ }
+}
+
+declare module 'mongoose-sequence' {
+ import mongoose = require('mongoose');
+ var _: (schema: mongoose.Schema, options?: Object) => void;
+ export = _;
+}