TS Discriminated union

Discriminated refers to the presence of a common, singular property in each type of the union that can be used to uniquely identify which type it is. This property is often called a "tag" or "discriminator".

type Result<T> =
  | { success: true; value: T }
  | { success: false; error: string };

function tryParseInt(text: string): Result<number> {
  if (/^-?\d+$/.test(text)) {
    return {
      success: true,
      value: parseInt(text),

  return {
    success: false,
    error: "Invalid number format.",

const result = tryParseInt("42");
result.success && result.value; //⚠️ no error property
!result.success && result.error; //⚠️ no value property