Skip to content

False negatives and false positives for "Object is possibly 'null'" warning in typescript@next with "complex" if  #10198

Closed

Description

TypeScript Version: 2.1.0-dev.20160807

Code

class Nested {
  data: string;
}

class Foo {
  bar: Nested | null = null;
  baz: number = 1;

  get data(): null | string {
    if (this.bar === null || this.baz !== 1) {
      return null;
    } else {
      return this.bar.data;
             // ^~~~~ Object is possibly 'null'. (BUT IT CAN'T BE NULL.)
    }
  }
}

Expected behavior:

No error.

Actual behavior:

An error.

Details:

This failure must be new. I think I installed typescript@next last week and had no error. I installed it today and it throws an error now.

If a you remove the second if-branch (this.baz !== 1) it works.

This also throws:

  get data(): null | string {
    if (this.bar === null) {
      return null;
    } else if (this.baz !== 1) {
      return null;
    } else {
      return this.bar.data;
             // ^~~~~ Object is possibly 'null'. (BUT IT CAN'T BE NULL.)
    }
  }

This works:

  get data(): null | string {
    if (this.baz !== 1) {
      return null;
    } else if (this.bar === null) {
      return null;
    } else  {
      return this.bar.data;
    }
  }

(!) On the other hand: This works, but could be wrong so it should throw an error!

  get data(): null | string {
    if (this.baz !== 1 || this.bar === null) {
      return null;
    } else {
      return this.bar.data;
    }
  }

Activity

  1. changed the title [-]Incorrect "Object is possibly 'null'" warning in typescript@next with "complex" if [/-] [+]False negatives and false positives for "Object is possibly 'null'" warning in typescript@next with "complex" if [/+] on Aug 8, 2016
  2. yortus commented on Aug 8, 2016

    @yortus
    Contributor

    This also works:

      get data(): null | string {
        let x = this.bar; // x is Nested | null
        if (x === null || this.baz !== 1) {
          return null;
        } else {
          return x.data; // OK
        }
      }
  3. ahejlsberg commented on Aug 8, 2016

    @ahejlsberg
    Member

    Duplicate of #10169, fix available in #10188.

  4. locked and limited conversation to collaborators on Jun 19, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    DuplicateAn existing issue was already created

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions