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

Type 'BehaviorSubject<false>' is not assignable to type 'BehaviorSubject<boolean>'

我的其中一个组件中有这个:

public booleanSubject: BehaviorSubject<boolean> = new BehaviorSubject(false);

当我将 "strictFunctionTypes": true 添加到 tsconfig.json 文件时,出现以下错误:

× Compiling TypeScript sources through NGC
ERROR: path/to/my/component.component.ts:28:10 - error TS2322: Type 'BehaviorSubject<false>' is not assignable to type 'BehaviorSubject<boolean>'.
  Types of property 'observers' are incompatible.
    Type 'Observer<false>[]' is not assignable to type 'Observer<boolean>[]'.
      Type 'Observer<false>' is not assignable to type 'Observer<boolean>'.
        Type 'boolean' is not assignable to type 'false'.

28   public booleanSubject: BehaviorSubject<boolean> = new BehaviorSubject(false);

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

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

public booleanSubject = new BehaviorSubject<boolean>(false);

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

Igor Melo Telheiro 回答正确。稍微扩展一下。

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

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

原因是您将变量 booleanSubject 分配为布尔值,但 new BehaviorSubject(false) 的输出类型为 false 而不是类型 boolean.

public booleanSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);

将输出 BehaviorSubject<boolean> 而不是 BehaviorSubject<false> 并修复 typescript 错误。

这通常是因为 TSConfig stict -> 更准确地说 strictFunctionTypes: true