如何在Typescript中覆盖或扩展libary类型定义

时间:2017-05-13 10:46:49

标签: typescript

如果我在Typescript中导入库类型声明。当编译器出现问题时,如何扩展该库的定义,但它是否是有效的js代码?例如,与实际实现相比,validate.js类型绑定非常不准确。如下所示......

import * as validate from 'validate.js';

declare namespace validate {
  Promise: any;
  async: any;
}

与mongoose类似,我无法访问modelSchemas属性,但我需要。

import * as mongoose from 'mongoose';
declare namespace mongoose {
  export modelSchemas any[];
}

因此,如果我想为现有类型添加定义只是为了关闭编译器。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

custom-typings.d.ts的根src中添加其他类型的内容。

自定义-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[]
}

我-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模块及其属性是不变的。