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

使用as const后TypeScript只读对象跨目录调用运行报错问题

问题

在mobile目录的文件中调用common目录下的对象属性,编译阶段无报错:

  • 给对象添加as const使其成为类型层面的只读对象时,运行时报错:Uncaught TypeError: Cannot read properties of undefined (reading 'btnText')
  • 移除as const后运行正常,但对象失去类型只读特性

相关代码示例:
common目录配置文件:

export const btnConfig = { btnText: '确认' } as const;

mobile目录调用代码:

import { btnConfig } from '@/common/config';
// 调用btnConfig.btnText时运行报错
解决方案
  1. 替换as const为类型+运行时双只读方案
    如果需要同时保证类型只读和运行时只读,用Object.freeze配合as const,既保留类型层面的只读约束,又避免模块加载异常:
// common目录配置文件
export const btnConfig = Object.freeze({ btnText: '确认' }) as const;
  1. 检查模块导入路径
    确认项目路径别名(如@/)在编译和运行时的解析逻辑一致,查看打包产物中该模块的导入路径是否正确,排查模块未被正常打包的情况。

  2. 清理缓存重新构建
    清除打包工具(如Vite、Webpack)的缓存,以及项目的node_modules缓存,重新执行构建命令,避免缓存导致的模块加载异常。

  3. 调整打包工具的tree shaking配置
    检查打包工具的tree shaking规则,若该模块被误优化删除,可通过配置sideEffects标记模块存在副作用,防止被tree shaking移除。

内容的提问来源于stack exchange,提问作者Amitay Tsinis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:35:26