gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:58:19 26 4
gpt4 key购买 nike

我相信这个问题纯粹是 Typescript 相关的,在我的例子中恰好涉及到 BehaviorSubject。

我知道这两行:

    const myVariable: string | null = 'string';

    const myVariable: string | null = null;

是有效的语法。所以按照同样的思路,我已经声明了这个 BehavoirSubject:

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

这不起作用,因为这个错误:

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 在此示例中应采用 User 或 null 类型,但它似乎只能同时接受这两种类型作为单个预期类型,因此这是一种解决方法:

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

类型本身似乎无关紧要,“string | null”和“User | string”都抛出相同类型的错误,那么这种类型实际上应该如何完成呢?我宁愿不必进行类型转换。

提前致谢:)

最佳答案

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

明确指定T的类型:

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

关于typescript - 为什么 Typescript 不让 BehaviorSubject 采用联合类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58291279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com