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

如何消除Angular中AppInjector.get已弃用的TSLint警告?

解决Angular中get is deprecated: from v4.0.0 use Type or InjectionToken警告

嘿,我之前在项目里也遇到过一模一样的警告,刚好能给你捋清楚怎么解决!

这个警告本质是Angular从v4开始就弃用了Injector.get()方法接收字符串令牌的用法,现在要求我们用类类型或者InjectionToken来获取依赖,这样不仅类型更安全,也符合框架的最佳实践。

结合你给出的app.injector.ts和app.module.ts代码,你的全局注入器设置是没问题的,问题出在你使用AppInjector.get()的地方,下面分两种情况给你解决方案:

情况1:获取类形式的服务(最常见场景)

如果你之前是用字符串令牌获取服务,比如:

// 旧写法(触发警告)
const authService = AppInjector.get('AuthService');

直接改成传入服务的类类型就行:

import { AuthService } from './auth.service';

// 新写法(无警告)
const authService = AppInjector.get(AuthService);

情况2:使用自定义令牌(注入非类依赖或多实例服务)

如果你的依赖是用自定义字符串令牌注册的,那需要先把字符串令牌替换成InjectionToken:

  1. 先定义一个InjectionToken(可以放在服务文件或单独的令牌文件里):
import { InjectionToken } from '@angular/core';
import { MyCustomConfig } from './config.model';

// 泛型指定依赖类型,让类型检查更严格
export const MY_CUSTOM_CONFIG = new InjectionToken<MyCustomConfig>('MyCustomConfig');
  1. 在模块里用这个令牌提供依赖:
// app.module.ts
import { MY_CUSTOM_CONFIG } from './tokens';
import { MyCustomConfig } from './config.model';

const appConfig: MyCustomConfig = {
  apiUrl: 'https://api.example.com',
  timeout: 5000
};

@NgModule({
  providers: [
    { provide: MY_CUSTOM_CONFIG, useValue: appConfig }
  ]
})
export class AppModule {}
  1. 最后用这个令牌获取依赖:
import { MY_CUSTOM_CONFIG } from './tokens';
import { MyCustomConfig } from './config.model';

const config = AppInjector.get<MyCustomConfig>(MY_CUSTOM_CONFIG);

额外确认

你的app.injector.ts设置是正确的,别忘了在AppModule的ngDoBootstrap里初始化注入器(如果还没加的话):

// app.module.ts
import { ApplicationRef } from '@angular/core';
import { setAppInjector } from './app-injector';

export class AppModule {
  ngDoBootstrap(appRef: ApplicationRef) {
    setAppInjector(appRef.injector);
  }
}

这样改完之后,TSLint的警告应该就消失啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:33:29