Typescript 我是否可以确保函数不是';t被具有相同参数的其他人调用?

Typescript 我是否可以确保函数不是';t被具有相同参数的其他人调用?,typescript,caching,typing,Typescript,Caching,Typing,我编写了一个小服务,用于缓存返回可观察数据的请求。看起来是这样的: export class CacheService { private readonly cacheMap = new Map<string, Observable<any>>(); public cachify<T>( cacheKey: string, cacheableFunction: () => Observable<T> ): Obs

我编写了一个小服务,用于缓存返回可观察数据的请求。看起来是这样的:

export class CacheService {
  private readonly cacheMap = new Map<string, Observable<any>>();

  public cachify<T>(
    cacheKey: string,
    cacheableFunction: () => Observable<T>
  ): Observable<T> {
    const existingCacheItem = this.cacheMap.has(cacheKey);

    if (!existingCacheItem) {
      this.cacheMap.set(cacheKey, cacheableFunction().pipe(shareReplay()));
    }

    return this.cacheMap.get(cacheKey);
  }
}
  getNodes(): Observable<Node[]> {
    return this.cacheService.cachify('nodes|all', () =>
      this.http.get<Knotenpunkt[]>('/api/v1/node')
    );
  }

  getNodeById(id: number): Observable<Node> {
    return this.cacheService.cachify(`nodes|${id}`, () =>
      this.http.get<Knotenpunkt>('/api/v1/node/' + id)
    );
  }

TS不能保证这一点。。。您可以设计一个不同的API,它允许您使用@TitianCernicova Dragomir确保每个函数都有自己独特的idAgree。您可以在运行时抛出,但这可能不是您想要的。或者,如果您可以维护对正在传递的键的引用,那么您可以使用符号吗?符号保证唯一性,即使使用相同的字符串构造,即符号('key-a')!=符号(“a键”)。您需要在创建符号时维护对该符号的引用,然后再检索它though@mbdavis我是否理解正确,我应该从服务返回一个符号,然后将其存储在组件中?没错。从你的例子来看,我无法评论这是一个好方法还是一个坏方法——但它可能适合你的需要:)听起来是一件值得尝试的事情。谢谢
this.cacheService.cachify('key-a', functionThatReturnsString);

// should work, because it's a new key
this.cacheService.cachify('key-b', functionThatReturnsNumber);

// should not work, because it's an already used key and returns a number (instead of a string like the first)
this.cacheService.cachify('key-a', functionThatReturnsNumber);