Angular 13应用全局导入Lodash报错:ReferenceError: _ is not defined 求助
解决Angular全局导入Lodash后运行时
_ is not defined的问题 你遇到的问题很典型——虽然通过declare global让TypeScript编译时认可了全局的_类型,但并没有实际把Lodash赋值到全局对象,所以运行时JS环境找不到这个变量,才会抛出ReferenceError。
问题根源
你写的代码只是告诉TypeScript:“全局作用域里有个叫_的变量,类型和lodash一致”,但并没有在运行时把lodash库的实例挂载到全局对象上(浏览器环境下全局对象是window)。TypeScript编译时会忽略类型声明的缺失,但运行时JS是实打实需要这个变量存在的。
解决方案:补充全局赋值步骤
修改你的main.ts代码,在类型声明后把lodash实例赋值给window._,这样运行时全局环境就能找到_了:
// main.ts import * as lodash from 'lodash'; declare global { // 扩展Window接口,让TypeScript认可window._的类型 interface Window { _: typeof lodash; } } // 关键:把lodash实例挂载到全局window对象 window._ = lodash;
额外注意(针对Angular Universal/SSR场景)
如果你的项目用了服务端渲染,直接访问window会在服务端报错,需要先判断环境:
if (typeof window !== 'undefined') { window._ = lodash; }
验证是否生效
修改后重启项目,在任意组件或服务里直接使用_即可,不需要再单独导入lodash,TypeScript也会自动识别它的类型:
// 组件示例 @Component({...}) export class MyComponent { ngOnInit() { // 直接使用全局_ const arr = _.chunk([1,2,3,4], 2); console.log(arr); // 输出 [[1,2], [3,4]] } }
内容的提问来源于stack exchange,提问作者Gopi Raju
相关产品推荐
相关产品推荐

