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

Mar*_*ona 27 extends interface typescript definitelytyped

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

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

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

所以,如果我有我的DefinitelyTyped defininiton express-validator.d.ts:

declare module ExpressValidator {
  export interface Validator {
    is(): Validator;
    not(): Validator;
    isEmail(): Validator;
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能扩展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??
Run Code Online (Sandbox Code Playgroud)

bas*_*rat 27

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

不能在作为模块的文件中执行此操作(此处有一些指导),并且您的文件是模块,因为您有import expressValidator.

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

declare module ExpressValidator {
  export interface Validator {
     isArray: any;
  }
}
Run Code Online (Sandbox Code Playgroud)


cjb*_*rth 8

我能够按照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";
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现这也非常有效winston

  • 太感谢了。我所需要的只是导入“.d.ts”文件顶部的模块 (3认同)