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

Viewed 3280

I have this in one of my components:

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

When I add "strictFunctionTypes": true to the tsconfig.json file I get the following error:

× 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);

Does anyone know the reason and how to get it not to throw the error by keeping the strictFunctionTypes flag set to true?

3 Answers

Normally when I create a BehaviorSubject I just assign a type to it when initializing it. Try to it like this:

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

Doing so it will initialize the BehaviorSubject type as boolean and I believe the error will go away.

Igor Melo Telheiro answer is on point. Just to extend it a bit.

You can either declare that field with public booleanSubject = new BehaviorSubject(false); and it will automatically infer the right type BehaviorSubject<boolean>

Or you can declare the field with a type but then the assigned value must be also of that type when declared. public booleanSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);

The reason for that is that you are assigning the variable booleanSubject as a boolean, but the output for new BehaviorSubject(false) is of type false and not of type boolean.

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

will output a BehaviorSubject<boolean> instead of BehaviorSubject<false> and fixing the typescript error.

this usually is because of TSConfig stict -> more accurately strictFunctionTypes: true

Related