Put additional typings in custom-typings.d.ts in root of src.
custom-typings.d.ts
import * as mongoose from "mongoose";
//augment validate.js
declare module "validate.js" {
let Promise: any;
function async(param: any): any;
}
//augment mongoose
declare module "mongoose" {
let modelSchemas: mongoose.Schema[]
}
my-module.ts
import validate = require("validate.js");
import mongoose = require("mongoose");
import * as Bluebird from "bluebird";
validate.Promise = Bluebird;
mongoose.Promise = Bluebird;
let schema = new mongoose.Schema({
name: String
});
mongoose.modelSchemas = [schema];
validate.async("foo");
Why import with ES5 syntax (require)? ES6 modules and their properties are constant.