function tc<T = unknown, U = T>(
  t: () => Promise<T extends Promise<any> ? never : T>,
  c: (e: unknown) => Promise<U extends Promise<any> ? never : U>
): Promise<[T, undefined] | [U | undefined, unknown]>