类型“BehaviorSubject<false>”不可分配给类型“BehaviorSubject<boolean>”

Ala*_*ros 16 typescript tsconfig angular

我的一个组件中有这个:

\n
public booleanSubject: BehaviorSubject<boolean> = new BehaviorSubject(false);\n
Run Code Online (Sandbox Code Playgroud)\n

当我添加"strictFunctionTypes": truetsconfig.json文件时,出现以下错误:

\n
\xc3\x97 Compiling TypeScript sources through NGC\nERROR: path/to/my/component.component.ts:28:10 - error TS2322: Type \'BehaviorSubject<false>\' is not assignable to type \'BehaviorSubject<boolean>\'.\n  Types of property \'observers\' are incompatible.\n    Type \'Observer<false>[]\' is not assignable to type \'Observer<boolean>[]\'.\n      Type \'Observer<false>\' is not assignable to type \'Observer<boolean>\'.\n        Type \'boolean\' is not assignable to type \'false\'.\n\n28   public booleanSubject: BehaviorSubject<boolean> = new BehaviorSubject(false);\n
Run Code Online (Sandbox Code Playgroud)\n

有谁知道原因以及如何通过将标志设置为不抛出strictFunctionTypes错误true

\n

Igo*_*iro 17

通常,当我创建一个BehaviorSubject时,我只是在初始化它时为其分配一个类型。尝试像这样:

public booleanSubject = new BehaviorSubject<boolean>(false);
Run Code Online (Sandbox Code Playgroud)

这样做会将BehaviorSubject 类型初始化为布尔值,我相信错误将会消失。


Pan*_*kos 7

伊戈尔·梅洛·特尔黑罗的回答很切题。只是为了延长一点。

您可以使用 声明该字段 public booleanSubject = new BehaviorSubject(false); ,它会自动推断出正确的类型BehaviorSubject<boolean>

或者,您可以使用类型声明字段,但声明时分配的值也必须是该类型。 public booleanSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);