',node.js,typescript,express"/>

首页 > 解决方案 > “字符串”类型的表达式不能用于索引类型“请求”'

问题描述

我正在尝试创建一个中间件来验证请求中的输入数据。

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> { }

上面的定义是什么意思?

标签: node.jstypescriptexpress

解决方案


改变工作的key: string定义。validatorkey: keyof Request


推荐阅读