You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中Error类型无lineNumber属性的解决方案问询

解决TypeScript中获取Error行号的类型问题

在JavaScript里,Error对象确实自带lineNumber属性,但TypeScript内置的Error类型并没有声明这个属性,所以直接访问会触发类型错误。除了转any,还有这几种更规范的处理方式:

1. 扩展全局Error接口

在项目中声明一个全局接口,扩展内置的Error类型,添加lineNumber属性。这样整个项目里的Error对象都会被TS识别为带有该属性:

interface Error {
  lineNumber?: number;
}

private logger(msg: string, error: Error) {
  const l = error.lineNumber;
  console.info(`info: ${msg} lineno: ${l}`);
}

2. 使用自定义类型断言

定义一个结合Error和lineNumber的自定义类型,再把error断言为这个类型,比用any更具类型安全性:

type ErrorWithLineNumber = Error & {
  lineNumber?: number;
};

private logger(msg: string, error: Error) {
  const e = error as ErrorWithLineNumber;
  const l = e.lineNumber;
  console.info(`info: ${msg} lineno: ${l}`);
}

3. 类型守卫+可选链

通过类型守卫检查error是否包含lineNumber属性,同时用可选链避免运行时潜在错误:

private logger(msg: string, error: Error) {
  if ('lineNumber' in error && typeof error.lineNumber === 'number') {
    console.info(`info: ${msg} lineno: ${error.lineNumber}`);
  } else {
    console.info(`info: ${msg}`);
  }
}

内容的提问来源于stack exchange,提问作者Alex Lehmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:25:58