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

TypeScript含Error结尾命名空间如何扩展内置Error类

问题描述

编写如下TypeScript代码时:

namespace Core.Error {
  export class ArgumentError extends Error {}
}

触发错误:

Type 'typeof Error' is not a constructor function type.ts(2507)

原因是代码中的Error被优先解析为当前命名空间Core.Error,无法识别全局内置的Error类。但将命名空间改为Core.Blah后,代码可正常运行:

namespace Core.Blah {
  export class ArgumentError extends Error {}
}

需求:保留以Error结尾的命名空间,同时扩展内置Error类,仅使用命名空间,不通过import导入,之前尝试转义\Error无效。

解决方法

问题根源是命名空间内部的标识符解析优先级:Core.Error命名空间里的Error会指向命名空间本身,而非全局对象。可以通过以下方式明确引用全局Error:

  • 跨环境通用方案(推荐):使用globalThis访问全局内置Error类
namespace Core.Error {
  export class ArgumentError extends globalThis.Error {}
}
  • 环境特定方案:

    • 浏览器环境下,直接使用window.Error:
      namespace Core.Error {
        export class ArgumentError extends window.Error {}
      }
      
    • Node.js环境下,使用global.Error:
      namespace Core.Error {
        export class ArgumentError extends global.Error {}
      }
      
  • 类型断言方案:通过类型断言强制指定全局Error的类型,适合兼容旧版TypeScript的场景:

namespace Core.Error {
  export class ArgumentError extends (Error as typeof globalThis.Error) {}
}

内容的提问来源于stack exchange,提问作者Professor of programming

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:13:13