Angular16升级后ToastInjector的get方法类型不兼容TS2416错误求助
解决Angular 16升级后TS2416类型不兼容错误
Angular 16对Injector的get方法签名做了变更,第三个参数从InjectFlags替换成了InjectOptions类型,这就是你遇到类型不兼容的核心原因。按以下步骤修改代码即可解决:
- 更新导入,引入
InjectOptions - 修改
get方法的第三个参数类型为InjectOptions - 调整返回类型以匹配基类方法签名
- 调用父注入器时正确传递参数
修改后的完整代码:
import { Injector, InjectOptions, InjectFlags } from '@angular/core'; import { ToastPackage } from './toast-config'; export class ToastRef<T> {} export class ToastInjector implements Injector { constructor( private _toastPck: ToastPackage, private _parntInjtr: Injector ) {} get<T>(token: any, notFoundValue?: T, options?: InjectOptions): T { if (token === ToastPackage) { // 类型断言确保返回值符合泛型T的预期 return this._toastPck as unknown as T; } return this._parntInjtr.get<T>(token, notFoundValue, options); } }
关键修改说明:
- 参数类型替换:将第三个参数
flags?: InjectFlags改为options?: InjectOptions,完全匹配Angular 16的Injector.get方法签名。 - 返回类型对齐:基类
Injector.get的返回类型为T,因此将原返回类型T | ToastPackage调整为T,通过类型断言处理ToastPackage的类型转换。 - 参数传递适配:直接将
options参数传递给父注入器的get方法,Angular内部会处理InjectFlags的逻辑。如果需要指定注入标志,可通过options对象传递:// 示例:传递可选注入标志 this._parntInjtr.get<T>(token, notFoundValue, { flags: InjectFlags.Optional });
内容的提问来源于stack exchange,提问作者John Mikel
相关产品推荐
相关产品推荐

