在我的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??
答案 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.