void is not valid as a constituent in a union type の修正方法

状況

function get(): string {
  // get something
}
function set(): void {
  // set something
}

この2つの関数を1つにまとめたいが

function manage(mode: "get" | "set"): string | void {
  switch (mode) {
    case "get":
      // get something
      break;
    case "set":
      // set something
      break;
    default:
      // error
      break;
  }
}
void is not valid as a constituent in a union type

となってしまう

解決方法

undefinedを使う


function manage(mode: "get" | "set"): string | undefined {
  switch (mode) {
    case "get":
      // get something
      break;
    case "set":
      // set something
      break;
    default:
      // error
      break;
  }
}

理由

void typeは関数の呼び出し側で戻り値を全く利用しないことを想定している
それに対してmanage()関数は、mode="get"の際には、戻り値のstringを利用するので、voidをunionするのはおかしな話になるため、undefinedを使う


いいなと思ったら応援しよう!