Skip to content

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

@donaldpipowitch

Description

@donaldpipowitch

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;
    }
  }

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