扩展 .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
也非常有效。
在我的 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
也非常有效。