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

Angular项目编译报错:TypeError: jit_nodeValue_7(...).$any is not a function

解决 Angular 编译错误:ERROR TypeError: jit_nodeValue_7(...).$any is not a function

我之前处理过好几次类似的问题,这个错误的核心原因其实很明确:$any() 是 Angular 6 及以上版本才引入的模板类型断言语法,但你的项目使用的是 Angular 5.x 版本,版本不兼容直接导致了这个报错。你试过重装依赖、更新版本没解决,大概率是没找对版本匹配的方向,下面给你两个针对性的解决方案:


方案 1:升级 Angular 到 6+ 版本(推荐长期解决)

你的项目依赖里 Angular 核心包都是 5.x 版本,要支持 $any() 必须升级到 Angular 6 及以上。升级时需要注意第三方依赖的兼容性:

  1. 先升级 Angular 核心套件和 CLI:
    ng update @angular/core@6 @angular/cli@6
    
  2. 同步升级第三方依赖:
    • 比如 @angular/material 需要升级到 6.x 版本(和 Angular 版本严格匹配)
    • @agm/core 可以升级到支持 Angular 6 的版本(比如 ^1.1.0)
    • 其他库如 ngx-chips、ng2-select 也要确认兼容 Angular 6 的版本,必要时替换为替代库
  3. 升级 TypeScript 到 2.7.x(Angular 6 要求 TypeScript 2.7+):
    npm install typescript@2.7.2 --save-dev
    
  4. 清理缓存并重装依赖:
    rm -rf node_modules package-lock.json
    npm install
    

方案 2:移除所有 $any() 语法(临时快速修复)

如果暂时不想升级 Angular,需要找到项目中所有使用 $any() 的代码并替换:

  1. 全局搜索项目中的 $any 关键词,定位到使用该语法的模板或组件(你提供的 LoginComponent 模板里没有,但可能在其他组件或第三方库的模板中)
  2. 替换方式:
    • 如果是模板里的 $any(obj).property,可以改为 obj['property'] 绕过类型检查
    • 如果是组件类中的代码,直接用类型断言(比如 (obj as any).property)
  3. 检查第三方依赖:如果是某个库内部使用了 $any,需要降级该库到适配 Angular 5 的版本,比如查看该库的 npm 历史版本,找到支持 Angular 5 的最后一个版本安装

你的项目配置参考(方便排查)

package.json 依赖配置

"dependencies": { 
  "@agm/core": "^1.0.0-beta.0", 
  "@angular/animations": "^4.3.1", 
  "@angular/cdk": "^5.1.0", 
  "@angular/common": "^5.0.0", 
  "@angular/compiler": "^5.0.0", 
  "@angular/core": "^5.0.0", 
  "@angular/forms": "^5.2.1", 
  "@angular/http": "^5.0.0", 
  "@angular/material": "^5.1.0", 
  "@angular/platform-browser": "^5.2.1", 
  "@angular/platform-browser-dynamic": "^5.0.0", 
  "@angular/platform-server": "^5.0.0", 
  "@angular/router": "^5.0.0", 
  "angular-form-validator": "^1.6.2", 
  "angular-material-source": "github:angular/material", 
  "angular2-material-datepicker": "^0.5.0", 
  "animate.css": "^3.5.2", 
  "arrive": "^2.3.1", 
  "bootstrap": "^3.3.5", 
  "bootstrap-material-design": "^0.5.10", 
  "bootstrap-notify": "^3.1.3", 
  "bootstrap-select": "^1.12.2", 
  "bootstrap-tagsinput": "^0.7.1", 
  "chartist": "^0.9.4", 
  "chartist-plugin-zoom": "^0.4.0", 
  "core-js": "^2.4.1", 
  "datatables": "^1.10.12", 
  "datatables.net-bs": "^1.10.12", 
  "datatables.net-responsive": "^2.1.1", 
  "eonasdan-bootstrap-datetimepicker": "^4.17.47", 
  "fullcalendar": "^3.4.0", 
  "googleapis": "^19.0.0", 
  "hammerjs": "^2.0.8", 
  "jasny-bootstrap": "^3.1.3", 
  "jquery": "^1.12.4", 
  "jquery-validation": "^1.17.0", 
  "jvectormap": "^2.0.4", 
  "moment": "^2.18.1", 
  "ng2-nouislider": "^1.6.1", 
  "ng2-select": "^1.2.0", 
  "ngx-chips": "^1.4.6", 
  "nouislider": "^9.2.0", 
  "perfect-scrollbar": "^1.2.0", 
  "rxjs": "^5.5.2", 
  "sweetalert2": "^7.0.5", 
  "twitter-bootstrap-wizard": "^1.2.0", 
  "typescript": "^2.4.2", 
  "validate": "^3.0.1", 
  "web-animations-js": "^2.3.1", 
  "zone.js": "^0.8.4" 
}

LoginComponent 组件代码

import { Component, OnInit, ElementRef } from '@angular/core'; 
import { userLogin } from 'app/entities'; 
import { UserService } from '../user.service'; 
declare var $: any; 

@Component({ 
  selector: 'app-login-cmp', 
  templateUrl: './login.component.html' 
}) 
export class LoginComponent implements OnInit { 
  private toggleButton: any; 
  private sidebarVisible: boolean; 
  private nativeElement: Node; 

  constructor(private element: ElementRef, private userService: UserService) { 
    this.nativeElement = element.nativeElement; 
    this.sidebarVisible = false; 
  } 

  public user: userLogin; 

  ngOnInit() { 
    this.user = {username:'',downtown:'tunja',password:''}; 
    this.userService.loginUser(this.user); 
    var navbar: HTMLElement = this.element.nativeElement; 
    this.toggleButton = navbar.getElementsByClassName('navbar-toggle')[0]; 
    setTimeout(function () { 
      // after 1000 ms we add the class animated to the login/register card 
      $('.card').removeClass('card-hidden'); 
    }, 700); 
  } 

  sidebarToggle() { 
    var toggleButton = this.toggleButton; 
    var body = document.getElementsByTagName('body')[0]; 
    var sidebar = document.getElementsByClassName('navbar-collapse')[0]; 
    if (this.sidebarVisible == false) { 
      setTimeout(function () { 
        toggleButton.classList.add('toggled'); 
      }, 500); 
      body.classList.add('nav-open'); 
      this.sidebarVisible = true; 
    } else { 
      this.toggleButton.classList.remove('toggled'); 
      this.sidebarVisible = false; 
      body.classList.remove('nav-open'); 
    } 
  } 

  //Funciones 
  onSubmit() { 
    this.userService.loginUser(this.user); 
  }
}

HTML 模板

<div class="wrapper wrapper-full-page"> 
  <div class="full-page login-page" filter-color="black"> 
    <!-- you can change the color of the filter page using: data-color="blue | purple | green | orange | red | rose " --> 
    <br> <br> <br> <br> <br> 
    <div class="content"> 
      <div class="container"> 
        <div class="row"> 
          <div class="col-md-4 col-sm-6 col-md-offset-4 col-sm-offset-3"> 
            <form method="#" action="#" #loginForm="ngForm" (ngSubmit)="onSubmit()"> 
              <div class="card card-login card-hidden"> 
                <div class="card-header text-center" data-background-color="rose"> 
                  <h4 class="card-title">Login</h4> 
                </div> 
                <div class="card-content"> 
                  <div class="input-group"> 
                    <span class="input-group-addon"> 
                      <i class="material-icons">email</i> 
                    </span> 
                    <div class="form-group label-floating"> 
                      <label class="control-label">Usuario</label> 
                      <input type="text" class="form-control" required [(ngModel)]="user.username" name="username"> 
                    </div> 
                  </div> 
                  <div class="input-group"> 
                    <span class="input-group-addon"> 
                      <i class="material-icons">lock_outline</i> 
                    </span> 
                    <div class="form-group label-floating"> 
                      <label class="control-label">Password</label> 
                      <input type="password" class="form-control" required [(ngModel)]="user.password" name="password"> 
                    </div> 
                  </div> 
                </div> 
                <div class="footer text-center"> 
                  <button type="submit" class="btn btn-rose btn-simple btn-wd btn-lg">Iniciar sesion</button> 
                </div> 
              </div> 
            </form> 
          </div> 
        </div> 
      </div> 
    </div> 
    <footer class="footer"> 
      <div class="container"> 
        <p class="copyright pull-right"> 
          &copy; {{test | date: 'yyyy'}} <a href="https://www.Zuama.com">Zuama</a> 
        </p> 
      </div> 
    </footer> 
    <div class="full-page-background" style="background-image: url(../../../assets/img/login.jpeg) "></div> 
  </div>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:49:34