为什么Typescript不让BehaviorSubject采用联合类型?

为什么Typescript不让BehaviorSubject采用联合类型?,typescript,rxjs,Typescript,Rxjs,我相信这个问题纯粹是与类型脚本有关的,在我的案例中,正好涉及到行为主体 我知道这两条线: const myVariable: string | null = 'string'; 及 是有效的语法。因此,按照同样的思路,我宣布了这个行为主体: const user: BehaviorSubject<User | null> = new BehaviorSubject( null ); const user:BehaviorSubject=new

我相信这个问题纯粹是与类型脚本有关的,在我的案例中,正好涉及到行为主体

我知道这两条线:

    const myVariable: string | null = 'string';

是有效的语法。因此,按照同样的思路,我宣布了这个行为主体:

    const user: BehaviorSubject<User | null> = new BehaviorSubject(
      null
    );
const user:BehaviorSubject=new BehaviorSubject(
无效的
);
这不起作用,因为出现以下错误:

Type 'BehaviorSubject<null>' is not assignable to type 'BehaviorSubject<User | null>'.
  Types of property 'observers' are incompatible.
    Type 'Observer<null>[]' is not assignable to type 'Observer<User | null>[]'.
      Type 'Observer<null>' is not assignable to type 'Observer<User | null>'.
        Type 'User | null' is not assignable to type 'null'.
          Type 'User' is not assignable to type 'null'.ts(2322)
类型“BehaviorSubject”不能分配给类型“BehaviorSubject”。
属性“观察者”的类型不兼容。
类型“Observer[]”不可分配给类型“Observer[]”。
类型“Observer”不可分配给类型“Observer”。
类型“User | null”不可分配给类型“null”。
类型“User”不可分配给类型“null”。ts(2322)
我的期望是,在本例中,此BehaviorSubject应采用User或null类型,但它似乎只会同时接受这两种类型作为单个预期类型,因此这是一种解决方法:

const user: BehaviorSubject<User | null> = new BehaviorSubject(
    null as User | null
  );
const user:BehaviorSubject=new BehaviorSubject(
作为用户的null | null
);
类型本身似乎并不重要,“string | null”和“User | string”都会抛出相同类型的错误,那么这种类型的输入应该如何进行呢?我宁愿永远不必打字


提前感谢:)

通过不在构造函数中指定类型,泛型类型参数被推断为
null
,而不是
User | null
。变量的类型(
const user
)与此无关(赋值发生在值构造之后,仅在有转换时执行转换)

明确指定
T
的类型:

const user = new BehaviorSubject<User | null>(null);
const user=new BehaviorSubject(null);

通过不在构造函数中指定类型,泛型类型参数被推断为
null
,而不是
User | null
。变量的类型(
const user
)与此无关(赋值发生在值构造之后,仅在有转换时执行转换)

明确指定
T
的类型:

const user = new BehaviorSubject<User | null>(null);
const user=new BehaviorSubject(null);

请发布一个不起作用的完整代码示例。我能够在操场上使用
User | null
类型作为行为主体,没有错误。通常,此类分配是否兼容取决于通用类的差异尝试“new behaviorSubject(null)”请发布一个不起作用的完整代码示例。我能够在操场上使用
User | null
类型作为行为主体,没有错误。通常,这样的分配是否兼容取决于通用类的差异尝试“new behaviorSubject(null)”当,新手错误。很好的解释,顶级小伙子:)谢谢你,菜鸟的错误。很好的解释,顶级小伙子:)谢谢