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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:03:10