首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >类型'ErrorRequestHandler<ParamsDictionary,any,any,ParsedQs,Record<string,any>‘.ts(2339)上不存在属性'message’?

您好,我在我的节点typescript应用程序中创建了一个自定义错误中间件处理程序

并得到消息不存在于类型ErrorRquestHandler上的错误

代码语言:javascript
运行
AI代码解释
复制
const errorHandler = (
  err: ErrorRequestHandler, 
  _req: Request, 
  res: Response, 
  _next: NextFunction
) => {
  const statusCode = res.statusCode === 200 ? 500 : res.statusCode;
  res.status(statusCode);
  res.json({
    message: err.message,
    stack: err.stack
  })
}

我尝试在我的tsconfig.json文件中取消注释"typeRoots“和"types”,但仍然出现相同的错误。

是什么导致了这个错误?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-17 15:14:55

看起来您有一个正确声明的错误处理程序,但是err参数的类型是错误的,相反,const errorHandler本身应该使用ErrorRequestHandler类型,以便推断参数。

类型ErrorRequestHandlerdefined as follows in DefinitelyTyped

代码语言:javascript
运行
AI代码解释
复制
export type ErrorRequestHandler<
  P = ParamsDictionary,
  ResBody = any,
  ReqBody = any,
  ReqQuery = ParsedQs,
  Locals extends Record<string, any> = Record<string, any>
> = (
  err: any,
  req: Request<P, ResBody, ReqBody, ReqQuery, Locals>,
  res: Response<ResBody, Locals>,
  next: NextFunction,
) => void;

建议您的代码应如下所示:

代码语言:javascript
运行
AI代码解释
复制
const errorHandler: ErrorRequestHandler = (
  err, 
  _req, 
  res, 
  _next
) => {
  const statusCode = res.statusCode === 200 ? 500 : res.statusCode;
  res.status(statusCode);
  res.json({
    message: err.message,
    stack: err.stack
  })
}

请注意,将const errorHandler更改为使用ErrorRequestHandler类型化意味着您可以在函数上删除显式类型化的参数(除非您启用了需要这些参数的tsconfig选项)。请注意,多亏了ErrorRequestHandler,现在err被类型化为err: any,您可能应该在使用err.message之前先测试它以确保它是错误的,因为它也不能保证是Error的一种类型。但是,编译器会允许它,因为它的类型是any,为了安全起见,我建议您在使用属性之前使用built-in node utility api显式地测试错误。

代码语言:javascript
运行
AI代码解释
复制
if (isNativeError(err)) {
  // use err.message
} else {
  // handle unexpected error
  // or send generic unknown error response
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70012398

复制
相关文章
Koltin Any 类型Koltin Any 类型
The root of the Kotlin class hierarchy. Every Kotlin class has Any as a superclass.
一个会写诗的程序员
2018/08/17
5790
(十八)any 类型
当我们不知道一个变量具体类型的时候,或者说 TypeScript 无法自动推断类型的时候,就可以使用 any
老怪兽
2023/02/22
3460
Ts中string、number和any等类型 不能当做索引用,怎么处理?
导文Ts中string、number和any等类型 不能当做索引用,怎么处理?报错:元素隐式具有“any”类型,因为类型为“number”的表达式不能用于索引类型“[***”。在类型“[ ***”上找不到具有类型为“number"的参数的索引签名。 ts(7053)keyof 的使用问题Ts中string、number和any等类型 不能当做索引用,怎么处理?const handerField = (item: number) => { caselist= data.showList[item]//报错
肥晨
2023/04/23
1.7K0
TypeScript-any和void类型
TypeScript 中的 "any" 类型表示一种不具体限制类型的变量,可用于灵活的编码,但缺乏类型检查。而 "void" 类型用于表示函数不返回任何值。任何值赋予 "void" 类型时,通常用于强调函数的副作用而非返回值。使用 "any" 要小心,它减弱了类型检查,而 "void" 有助于明确函数的返回意图。选择正确的类型可以提高代码的可维护性和安全性。
杨不易呀
2023/09/28
3220
TypeScript-any和void类型
SQL谓词 ANY
ANY关键字与比较操作符一起创建谓词(量化比较条件),如果标量表达式的值匹配子查询检索到的一个或多个对应值,则该谓词为真。 ANY谓词将单个标量表达式项与单个子查询SELECT项进行比较。 具有多个选择项的子查询将生成SQLCODE -10错误。
用户7741497
2022/05/09
4750
Python any() 函数
any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。
狼啸风云
2021/03/03
7630
12.Any、AnyObject与类型转化
Any、AnyObject Any是一个空协议集合的别名,它表示没有实现任何协议,因此它可以是任何类型,包括类实例与结构体实例。可以表示任何类型,包括函数类型。 AnyObject是一个成员为空的协
YungFan
2018/09/28
1.2K0
Consumer is not subscribed to any topics
产生该问题的原因主要是zookeeper中存在旧版本的kafka-connect topic信息,导致新版本的kafka-connect启动异常:
九州暮云
2019/08/21
1.8K0
python: all & any 函数
API all(iterable) return bool(全都 不为''/0) any(iterable) return bool(起码有一个 不为''/0) 设计实验 待解决问题 all函数 和 any函数 的 定义? iterable参数 的 数据类型 是否会对函数结果 产生影响? 猜想 对 任一 iterable参数,俩函数的返回结果是否满足 互补 ? 实验思路 设置实验一,对 all函数 的返回结果进行探究;同时替换 iterable参数 的 数据类型 以探究问题二; 仿
JNingWei
2018/09/28
5770
python基础-类型注解List, Dict, Tuple, Any
前面学习了 Type Hints 基础类型 int , str 以及简单的复合类型 list, tuple, dict。 接下来学习typing模块List, Dict, Tuple有什么不一样
上海-悠悠
2023/09/21
5.2K0
python基础-类型注解List, Dict, Tuple, Any
Lumen增加any路由
vender/laravel/lumen-frammework/src/Routing/Router.php
Kunkka Wu
2022/01/13
6870
Python-typing: 类型标注与支持 Any类型
Any 是一种特殊的类型。静态类型检查器将所有类型视为与 Any 兼容,反之亦然, Any 也与所有类型相兼容。
用户7886150
2020/12/04
3K0
Python - typing 模块 —— Any Type
Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html
小菠萝测试笔记
2021/08/23
5110
TypeScript 中的顶级类型:any 和 unknown
在 TypeScript中,any 和 unknown 是包含所有值的类型。在本文中,我们将会研究它们是怎样工作的。
疯狂的技术宅
2020/06/11
2.5K0
TypeScript 中的顶级类型:any 和 unknown
27.python any函数
返回值:如果iterable迭代器中的所有元素全部都为假,返回False;反之返回True;
猿说编程[Python和C]
2020/03/12
4340
MSVC std::any 源码解析
std::any 是 c++17 标准新提供的类,作用是存储任意类型的一段内存,并可以重复赋值,在赋值后可以使用 std::any_cast 将 std::any 所存储的值转换成特定类型,如果 std::any 中存储的值的类型与目标类型不匹配,则会抛出 std::bad_any_cast 异常。
Kindem
2022/08/12
1.4K0
Python函数: any()和all(
平常的文本处理工作中,我经常会遇到这么一种情况:用python判断一个string是否包含一个list里的元素。
py3study
2020/01/19
7330
Python函数: any()和all(
[译] 理解 TypeScript 中 any 和 unknown
译者: 在实际场景中, 很少看到有人在 Typescript 中使用 unknown , 使用unknown 可以保证类型安全,使用 any 则彻底放弃了类型检查 , 在很多情况下, 我们可以使用 unknow 来替代 any , 既灵活, 又可以继续保证类型安全.
lucifer210
2020/02/26
1.5K0
点击加载更多

相似问题

属性'user‘在'Request<ParamsDictionary,any,any,ParsedQs,Record<string,any>>’类型中不存在

32

属性'originalUrl‘在'Request<ParamsDictionary,any,any,ParsedQs,Record<string,any>>’类型中不存在

15

类型'NextApiRequest‘缺少'Request<ParamsDictionary,any,any,ParsedQs,Record<string,any>>’类型中的下列属性

13

在类型记录中重写Express请求类型。错误: Request<ParamsDictionary,any,any,QueryString.ParsedQs,Record<string,any>>.signedCookies: any

13

属性“version”在'Request<ParamsDictionary,any,any,ParsedQs>‘类型中不存在

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文