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

Ric*_*d G 5 typescript

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

import * as validate from 'validate.js';

declare namespace validate {
  Promise: any;
  async: any;
}
Run Code Online (Sandbox Code Playgroud)

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

import * as mongoose from 'mongoose';
declare namespace mongoose {
  export modelSchemas any[];
}
Run Code Online (Sandbox Code Playgroud)

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

Gra*_*nga 15

把更多的分型中custom-typings.d.ts的根src

自定义类型.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[]
}
Run Code Online (Sandbox Code Playgroud)

我的模块.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");
Run Code Online (Sandbox Code Playgroud)

为什么import使用 ES5 语法 ( require)?ES6 模块及其属性是恒定的。