类型安全不适用于 Angular 依赖注入

问题描述 投票:0回答:1

当我使用 Angular 的依赖注入时,我失去了打字的能力。我不知道为什么?有人可以解释并找到在严格输入的同时使用 DI 的解决方案吗?我正在使用一项服务来严格键入本地存储,这里有一些上下文:

我使用具有泛型类型的类。

@Injectable()
export class LocalStorageService<T> implements iStorageService<T> {
// ...

  constructor(@Inject(LOCAL_STORAGE_NAMESPACE) private namespace: string) {}


  set<K extends keyof T>(key: K, value: T[K]) {
    if (this.storage) {
      this.storage.setItem(
        this.namespace + key.toString(),
        JSON.stringify(value)
      );
    }
  }

// ...
}

在消费者层面:

  providers: [
    {
      provide: LOCAL_STORAGE_NAMESPACE,
      useValue: 'dumbnamespace',
    },
    LocalStorageService<LocalStorageModel>,
  ],

我也尝试过:

  providers: [
    {
      provide: 'LocalStorageService',
      useFactory: () => new LocalStorageService<LocalStorageModel>('namespace'),
    },
  ],

使用本地存储模型:

interface LocalStorageModel {
  [LocalStorageKey.Name]: string;
}

在组件中:

  private testTypeChecking = inject(LocalStorageService).set(LocalStorageKey.City, 22);

这里应该没有错误:(

这样做是可行的(我们有一个错误,数字不是字符串),但不使用 Angular 的 DI。

const testTypeChecking = () => {
  const localStorageService = new LocalStorageService<LocalStorageModel>('id');
  localStorageService.set(LocalStorageKey.Name, 22);
};

有没有人解释一下?

angular typescript dependency-injection type-safety
1个回答
0
投票

这是因为未指定通用参数,所以这是预期的😅

private localStorage = inject<LocalStorageService<LocalStorageModel>>(LocalStorageService<LocalStorageModel>)
// VS
constructor(private localStorage: LocalStorageService<LocalStorageModel>) {}
© www.soinside.com 2019 - 2024. All rights reserved.