扩展.d.ts文件

时间:2015-10-05 12:08:47

标签: interface typescript extends definitelytyped

在我的TypeScript项目中,我对外部js依赖项使用DefinitelyTyped定义。

有时候这些定义可能会过时。它也可能发生,因为某些库可以在运行时添加新方法,例如express-validator,您可以在其中定义自定义验证器函数。

因此,我想扩展那些添加新方法和/或属性的.d.ts定义。

所以如果我在express-validator.d.ts中有我的DefinitelyTyped定义:

declare module ExpressValidator {
  export interface Validator {
    is(): Validator;
    not(): Validator;
    isEmail(): Validator;
    ...
  }
}

如何扩展Validator界面,例如我的application.ts

///<reference path='../typings/tsd.d.ts' />

import expressValidator = require('express-validator');
export var app = express();

app.use(expressValidator({
    customValidators: {
        isArray: function(value) {
            return Array.isArray(value);
        }
 }
}));

// How to extend Validator interface adding isArray() method??

2 个答案:

答案 0 :(得分:27)

  

//如何扩展Validator接口添加isArray()方法??

无法在模块some guidance here)的文件中执行此操作,并且您的文件是模块,因为您有import expressValidator

而是创建一个extendedValidator.d.ts并为TypeScript的引擎添加新内容:

declare module ExpressValidator {
  export interface Validator {
     isArray: any;
  }
}

答案 1 :(得分:0)

我能够按照https://www.credera.com/blog/technology-solutions/typescript-adding-custom-type-definitions-for-existing-libraries/上的指示完成操作。在那里,他们以react为例。

import 'react';

declare module 'react' {
    interface OlHTMLAttributes<T> {
        type?: "1" | "a" | "A" | "i" | "I";
    }
}```

I found this works really well for `winston` too.