为什么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)”当,新手错误。很好的解释,顶级小伙子:)谢谢你,菜鸟的错误。很好的解释,顶级小伙子:)谢谢