我试图将部分代码转换为TypeScript,但是遇到快速验证器定义问题
我的代码如下所示:
///<reference path='../../../d.ts/node.d.ts' />
///<reference path='../../../d.ts/express.d.ts' />
///<reference path='../../../d.ts/express-validator.d.ts' />
import express = require('express');
import validator = require('express-validator');
function validate(req: express.Request, res: express.Response) {
req.assert('name', 'Name is required').notEmpty();
var errors = req.validationErrors();
if (errors !== null && errors.length > 0) {
res.json({
result: false,
errors: errors
});
return false;
}
return true;
}
Typescript编译器会生成以下错误:
error TS2094: The property 'assert' does not exist on value of type 'express.Request'.
error TS2094: The property 'validationErrors' does not exist on value of type 'express.Request'.
特别是在查看expreess-validator定义
时,这是有道理的export interface RequestValidation {
check(field: string, message: string): Validator;
assert(field: string, message: string): Validator;
sanitize(field: string): Sanitizer;
onValidationError(func: (msg: string) => void): void;
}
我对RequestValidation接口的理解是它必须扩展express.Request接口,但修改此接口声明并没有真正帮助。
我做错了什么?
谢谢!
答案 0 :(得分:1)
在我看来,Express Validator库扩展了Express Request
对象。即它为Express中定义的现有Request
添加了其他方法。
免责声明:我还没有找到Express Validator库的任何好文档,如果有人有链接,我可以更精确。
考虑到这一点,如果Express Validator库扩展了Express Request
接口,那么定义应该反映这一点。以下是扩展Express and Express Validator on Definitely Typed的定义的示例。
declare module Express {
interface Request extends ExpressValidator.RequestValidation {
}
}
这将解决assert
的问题,例如 - 如果有人找到了一些文档,我希望validatonErrors
问题能够以类似的方式解决。
答案 1 :(得分:1)
我有一个帮助器function
,用于检查'id' param
对象上的request
。在 TypeScript 1.5.0-beta 上正常工作的声明是:
// Somewhere at the top of your TypeScript code
/// <reference path="../../../../typings/tsd.d.ts" />
import ExpressValidator = require('express-validator');
import util = require('util');
我使用的辅助函数:
function getOnePreconditions(req:ExpressValidator.RequestValidation, res:express.Response, next:Function) {
req.checkParams('id', 'Parameter Id is mandatory').notEmpty().isInt();
var errors = req.validationErrors();
if (errors) {
res.send(400, 'errors' + util.inspect(errors));
} else {
next();
}
}
如果您确实为项目定义了tsd.json
并且您正确引用代码中的*.d.ts
TypeScript 定义文件,那么肯定会为{添加声明文件{1}}使用:
express-validator