HiveBrain v1.2.0
Get Started
← Back to all entries
patterntypescriptCritical

Typescript property does not exist on union type

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
typescriptexistpropertydoesnotuniontype

Problem

This is a situation I have ran into a couple of times, it seems like it should be fairly straightforward, but I can't find a solution that doesn't set the type to any

A function takes one of two different objects as the argument, checks which object has been received, and returns the corresponding field.

This is a simplified version of the problem, but the issue is that the two objects are only distinguishable by their properties(which have no overlap), and I can't access any of the properties, because they're not present on the other type.

type Obj1 = {
  message: string
}

type Obj2 = {
  text: string
}

const getText = (obj: Obj1 | Obj2): string => {
  if (obj.message) {
    return obj.message
  }

  return obj.text
}

Solution

You have to narrow down the type. You can do so by using the in operator.

const getText = (obj: Obj1 | Obj2): string => {
  if ("message" in obj) {
    return obj.message
  }

  return obj.text
}

Code Snippets

const getText = (obj: Obj1 | Obj2): string => {
  if ("message" in obj) {
    return obj.message
  }

  return obj.text
}

Context

Stack Overflow Q#58974640, score: 353

Revisions (0)

No revisions yet.