如何消除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:
- 先定义一个
InjectionToken(可以放在服务文件或单独的令牌文件里):
import { InjectionToken } from '@angular/core'; import { MyCustomConfig } from './config.model'; // 泛型指定依赖类型,让类型检查更严格 export const MY_CUSTOM_CONFIG = new InjectionToken<MyCustomConfig>('MyCustomConfig');
- 在模块里用这个令牌提供依赖:
// 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 {}
- 最后用这个令牌获取依赖:
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
相关产品推荐
相关产品推荐

