node.js - “字符串”类型的表达式不能用于索引类型“请求”'
问题描述
我正在尝试创建一个中间件来验证请求中的输入数据。
export function validator(schema: Joi.ObjectSchema, key: string) {
return function (req: Request, res: Response, next: NextFunction): void {
try {
Joi.assert(req[key], schema);
next();
} catch (error) {
console.log(error);
throw new Error(error);
}
};
}
但是req[key]
抛出以下错误:
元素隐含地具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“请求”。在“请求”类型上找不到具有“字符串”类型参数的索引签名。
我发现的与此类似的问题的其他解决方案包括他们自己代码中的接口。我不明白为什么会出现这个错误以及如何解决这个问题?
以下代码也来自express
的类型定义文件。
interface Request<P extends core.Params = core.ParamsDictionary, ResBody = any, ReqBody = any, ReqQuery = core.Query> extends core.Request<P, ResBody, ReqBody, ReqQuery> { }
上面的定义是什么意思?
解决方案
改变工作的key: string
定义。validator
key: keyof Request
推荐阅读
- visual-studio - 无法调试面向 .NET 5.0 的 Azure 函数
- amazon-web-services - 尝试使用 AWS SES API 发送电子邮件时出现“NotAuthorizedException/”
- php - 如何使用表格数据显示动态下拉列表
- c++ - 如何在不同文件中使用 #define 等宏在 Visual Studio for C++ 中生成重复代码
- css - Bootstrap 4 导航栏未在 iphone 上显示导航栏链接-但单击它们有效
- c# - 如果开关值不是选项,如何执行逻辑?
- c# - 在 Cognito 用户属性中存储非 AWS API 访问令牌
- html - 如何强制浏览器在 Edge 中粘贴 url 而不是页面标题
- python - 蟒蛇硒。元素不可交互
- python - 便携式操作码生成