使用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时运行报错
解决方案
- 替换
as const为类型+运行时双只读方案
如果需要同时保证类型只读和运行时只读,用Object.freeze配合as const,既保留类型层面的只读约束,又避免模块加载异常:
// common目录配置文件 export const btnConfig = Object.freeze({ btnText: '确认' }) as const;
检查模块导入路径
确认项目路径别名(如@/)在编译和运行时的解析逻辑一致,查看打包产物中该模块的导入路径是否正确,排查模块未被正常打包的情况。清理缓存重新构建
清除打包工具(如Vite、Webpack)的缓存,以及项目的node_modules缓存,重新执行构建命令,避免缓存导致的模块加载异常。调整打包工具的tree shaking配置
检查打包工具的tree shaking规则,若该模块被误优化删除,可通过配置sideEffects标记模块存在副作用,防止被tree shaking移除。
内容的提问来源于stack exchange,提问作者Amitay Tsinis
相关产品推荐
相关产品推荐

