2022-12-04

1670130000
notes
 04 Dec 2022  notes

Avoiding Null in TypeScript

I was looking at a great talk on Functional TypeScript by Thiago Temple in which he goes over a use-case (and general reason) for not using null whenever possible, but instead enforcing stricter type-checking to cater for empty return types in a homogenous manner.

A value of null can have any number of meanings, including but not limited to:

  • Value not found
  • An error has occurred
  • Unpredicted case
  • Value not required
  • Value is falsy

null therefore hides contextual meaning whenever it’s used. Consider the following function:

function findUserById(id: string): User | null {
  // ...
}

If null is returned, then it could mean either of the following:

  • the User could not be found
  • an Error has occurred

Since null doesn’t provide clarity, creating an Option type that unions a generic Some type and None type can help to give meaning to the output:

type Option<T> = Some<T> | None

type Some<T> = {
  kind: "someOption"
  value: T
}

type None = {
  kind: "noneOption"
}

With these types crated, the findUserById function’s output will indicate that either one of two options are present in the response; a clear value (of type Some) or no value (of type None):

function findUserById(id: string): Option<User> {
  // ...
}

Because of the kind property is shared between the two types, it can be inspected and used for conditional logic:

const user = findUserById;

if (user.kind === "someOption") {
  user.value;
  // ...
}
Webmentions & Comments

Copyright © Paramdeo Singh · Built with Jekyll in 🇬🇾 · All Rights Reserved

[ this node is permanently morphing last updated on 28 May 2023 ]

Paramdeo Singh Guyana

Generalist. Edgerunner. Riding the wave of consciousness in this treacherous mortal sea.

Technology Design Strategy Literature Personal Blogs
Search Site

Results are from Blog, Link Dumps, and #99Problems