扩展 .d.ts 文件中定义的接口

Extend interface defined in .d.ts file

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

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

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

所以如果我在 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??

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

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

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

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

我能够按照 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";
    }
}

我发现这对 winston 也非常有效。