【问题标题】:Types of property 'observers' are incompatible. Why?属性“观察者”的类型不兼容。为什么?
【发布时间】:2021-12-19 15:32:58
【问题描述】:

我正在尝试创建一个仅接受 AvailableLanguages 枚举值的 BehaviorSubject,但由于某种原因编译器不同意我的代码。 你能告诉我为什么吗?

我正在使用 Angular 12.2.10。

这里是服务:

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';

export enum AvailableLanguages {
  EN = "en-US",
  IT = "it-IT"
}


@Injectable({
  providedIn: 'root'
})
export class UserService {

  _selectedLanguage$: BehaviorSubject<AvailableLanguages> = new BehaviorSubject(AvailableLanguages.EN);

  constructor() { }
}

这是编译器的错误:

Error: src/app/services/user.service.ts:15:3 - error TS2322: Type 'BehaviorSubject<AvailableLanguages.EN>' is not assignable to type 'BehaviorSubject<AvailableLanguages>'.
  Types of property 'observers' are incompatible.
    Type 'Observer<AvailableLanguages.EN>[]' is not assignable to type 'Observer<AvailableLanguages>[]'.
      Type 'Observer<AvailableLanguages.EN>' is not assignable to type 'Observer<AvailableLanguages>'.
        Type 'AvailableLanguages' is not assignable to type 'AvailableLanguages.EN'.

15   _selectedLanguage$: BehaviorSubject<AvailableLanguages> = new BehaviorSubject(AvailableLanguages.EN);
     ~~~~~~~~~~~~~~~~~~




× Failed to compile.

【问题讨论】:

    标签: typing rxjs-observables angular12 typescript4.0


    【解决方案1】:

    嗯,可能是因为您在tsconfig.json 中使用了strict? 不过,就其本身而言,这不是问题。你只需要确保你的类型是“对齐的”。

    所以,你的声明:

    _selectedLanguage$: BehaviorSubject<AvailableLanguages> = new BehaviorSubject(AvailableLanguages.EN);
    

    应该是:

    _selectedLanguage$: BehaviorSubject<AvailableLanguages> = new BehaviorSubject<AvailableLanguages>(AvailableLanguages.EN);
    

    或者干脆让 TSC 推断出正确的类型:

    _selectedLanguage$ = new BehaviorSubject<AvailableLanguages>(AvailableLanguages.EN);
    

    【讨论】:

    • 谢谢,我只是忘了让它们对齐。是的,正如你猜到的,我使用的是严格的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2015-06-15
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多