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

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);
  }
}

关键修改说明:

  1. 参数类型替换:将第三个参数flags?: InjectFlags改为options?: InjectOptions,完全匹配Angular 16的Injector.get方法签名。
  2. 返回类型对齐:基类Injector.get的返回类型为T,因此将原返回类型T | ToastPackage调整为T,通过类型断言处理ToastPackage的类型转换。
  3. 参数传递适配:直接将options参数传递给父注入器的get方法,Angular内部会处理InjectFlags的逻辑。如果需要指定注入标志,可通过options对象传递:
    // 示例:传递可选注入标志
    this._parntInjtr.get<T>(token, notFoundValue, { flags: InjectFlags.Optional });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:43:25