【问题标题】:Type 'BehaviorSubject<false>' is not assignable to type 'BehaviorSubject<boolean>'类型 'BehaviorSubject<false>' 不可分配给类型 'BehaviorSubject<boolean>'
【发布时间】:2021-03-19 15:16:14
【问题描述】:

我的一个组件中有这个:

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 来使其不引发错误?

【问题讨论】:

    标签: angular typescript tsconfig


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      Igor Melo Telheiro 的回答恰到好处。只是为了扩展一点。

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

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

      【讨论】:

      • 虽然 Igor Melo Telheiro 的回答是正确的且更早,但我将其标记为解决方案,因为它更完整并直接指向问题。
      【解决方案3】:

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

      public booleanSubject: BehaviorSubject&lt;boolean&gt; = new BehaviorSubject&lt;boolean&gt;(false);

      将输出 BehaviorSubject&lt;boolean&gt; 而不是 BehaviorSubject&lt;false&gt; 并修复打字稿错误。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-29
        • 1970-01-01
        • 2019-01-04
        • 2023-01-22
        • 1970-01-01
        • 1970-01-01
        • 2021-06-07
        • 1970-01-01
        相关资源
        最近更新 更多