typescript Angular可选的多拦截器-为什么它被注入为null?

gr8qqesn  于 2023-04-13  发布在  TypeScript
关注(0)|答案(1)|浏览(124)

给定一个如下定义的multiinjectable,没有任何提供程序,我希望注入列表为空,但实际上它是null。
如果没有可注入的提供程序,有没有办法将值注入为[]而不是null?我不能覆盖构造函数中的值,因为构造函数中的代码在字段初始化器之后运行,所以在我纠正值之前错误就发生了。

const MY_INTERCEPTORS: InjectionToken<MyInterceptor> = new InjectionToken('MyInterceptors');

@Injectable()
export class MyService {
  constructor(
    @Optional() @Inject(MY_INTERCEPTORS) private readonly interceptors: MyInterceptor[]
  ) {
    super();
  }

  public myField$(input: Foo) = this.interceptors.reduce((agg, e) => e.intercept(agg), input);  // Expect this.interceptors to be [], but is null
}
vatpfxk5

vatpfxk51#

您可以为您的InjectionToken提供一个工厂。它将用作默认值

const MY_INTERCEPTORS: InjectionToken<Array<MyInterceptor>> = new InjectionToken('MyInterceptors', {
    factory: () => [],
});

顺便说一下,InjectionToken的类型应该是array

const MY_INTERCEPTORS: InjectionToken<Array<MyInterceptor>>

相关问题