代码之家  ›  专栏  ›  技术社区  ›  Stephen

尝试将Observable转换为Angular中的Signal时的类型不匹配

  •  0
  • Stephen  · 技术社区  · 2 年前

    我正在尝试转换 Observable 变成 Signal 从返回 login 作用

    login(username: string, password: string): Signal<LoginResponse> {
      const sourceObservable: Observable<LoginResponse> =
        this.http.post<LoginResponse>(this.apiUrl + '/login', {username, password})
    
      let lrp: LoginResponse = LoginResponse.withStatus(ResponseStatus.PENDING)
    
      return toSignal<LoginResponse>(sourceObservable, {requireSync: true, initialValue: lrp,}
      )
    }
    

    在返回语句中,我使用 toSignal() 这需要一个 ToSignalOptions 具有的对象 requireSync 设置为true和初始值。然而,编译器向我抱怨没有重载匹配,因为它期望一个 initialValue 的类型未定义,而我提供的是 LoginResponse 应该 是LoginResponse,但分析器不喜欢这样。

    我做错了什么吗?

    下面是IDE显示的错误快照。 Error as displayed by the IDE

    0 回复  |  直到 2 年前
        1
  •  0
  •   James Ashok    2 年前

    请删除 requireSync 来自 ToSignalOptions

    initialValue 仅当 requireSync 是假的

        2
  •  0
  •   OZ_    2 年前

    toSignal()需要注入上下文,我们不能随意调用它。 如果你想这样使用它,请在params中提供一个注入器:

    class SomeService {
      private readonly http = inject(HttpClient);
      private readonly apiUrl = 'https://api.example.com';
      private readonly injector = inject(Injector);
    
      login(username: string, password: string): Signal<LoginResponse> {
        const sourceObservable = this.http.post<LoginResponse>(
          this.apiUrl + '/login',
          { username, password }
        );
    
        const lrp: LoginResponse = LoginResponse.withStatus(ResponseStatus.PENDING);
    
        return toSignal<LoginResponse>(sourceObservable, {
          injector: this.injector,
          initialValue: lrp,
        });
      }
    }
    
    推荐文章