我相信这个问题纯粹是 Typescript 相关的,在我的例子中恰好涉及 BehaviorSubject。
我知道这两行:
const myVariable: string | null = 'string';
Run Code Online (Sandbox Code Playgroud)
和
const myVariable: string | null = null;
Run Code Online (Sandbox Code Playgroud)
是有效的语法。因此,我已经声明了这个 BehavoirSubject:
const user: BehaviorSubject<User | null> = new BehaviorSubject(
null
);
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为此错误:
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)
Run Code Online (Sandbox Code Playgroud)
我的期望是这个 BehaviorSubject 在这个例子中应该采用 User 或 null 类型,但它似乎只会同时接受这两种类型作为单一预期类型,因此这是一种解决方法:
const user: BehaviorSubject<User | null> = new BehaviorSubject(
null as User | null
);
Run Code Online (Sandbox Code Playgroud)
类型本身似乎无关紧要,“string | null”和“User | string”都抛出相同类型的错误,那么这种类型的输入实际上应该如何完成?我宁愿永远不必打字。
提前致谢 :)
通过不在构造函数中指定类型,泛型类型参数被推断为null,而不是User | null。变量 ( const user)的类型与此无关(赋值发生在值构造之后,并且只执行强制转换(如果有的话))。
明确指定的类型T:
const user = new BehaviorSubject<User | null>(null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |