Aeterna
Aeterna

Reputation: 366

Typescript does not infer undefined as a return type from array.prototype.find

I have a project using typescript 3.7.2 and every time i use the "find" method on arrays vs code does not show "undefined" as a possible return type.

interface Repository<T, TID> {
  get: (id: TID) => T | undefined;
}

class CustomerRepository implements Repository<Customer, string> {
  private customers: Customer[];

  constructor() {
    this.customers = [
    {
      id: "ID1",
      name: "Generic Customer 1",
      age: 30
    },
    {
      id: "ID2",
      name: "Generic Customer 2",
      age: 40
    },
    {
      id: "ID3",
      name: "Generic Customer 3",
      age: 50
    }
  ]
  }

  get(id: string): Customer | undefined {
    return this.customers.find(customer => customer.id === id);
  }
}

It does not matter if i call the "get" method on the repository or call "this.customers.find" inside the repository, it still won't show "undefined" as a possible return type. This code will compile and then chrash immediately after running:

const customer = customerRepo.get("ID4");
console.log(customer.id);

This is my tsconfig.json file:

{
"compilerOptions": {
    "target": "es5",
    "module": "es6",
    "allowJs": true,
    "sourceMap": true,
    "outDir": "./dist",
    "lib": ["dom", "es6", "dom.iterable", "scripthost"],
    "noImplicitAny": true
},
"exclude": [
    "./node_modules/**/*",
    "definitions"
]
}

Upvotes: 2

Views: 970

Answers (1)

Titian Cernicova-Dragomir
Titian Cernicova-Dragomir

Reputation: 249656

undefined and null are absorbed by other types in unions unless the strictNullChecks option is specified in tsconfig. See docs for all options.

If you add the option undefined will be present in the return type.

Upvotes: 8

Related Questions