Аналог результатов функции из TypeScript в C#?
Никак. В C# нет никаких юнионов и это пахнет говнокодом.

Если void или картинку, то возвращай картинку или null.

 Если нужно строку или число - создавай новый класс или структуру для этого.
Как по мне извращение
using System;
					
public class Program
{
	public static void Main()
	{
		try{
		  GetImage(2);
		}
		catch(ArgumentException e){
		  Console.WriteLine( int.Parse(e.Message));
		}
	}
	public static string GetImage(int index){
	  if(index == 1){ return "/img/1";}
	  throw new ArgumentException("5");
	}
}

Еще большее
using System;
					
public class Program
{
	public static void Main()
	{
		Object r = GetImage(1);
		Check(r);
		 r = GetImage(2);
		Check(r);
	}
	public static void Check(Object o){
	   if(o is String) Console.WriteLine("string");
	   if(o is int) Console.WriteLine("int");
		else
		Console.WriteLine(o.GetType());
	}
	public static Object GetImage(int index){
	  if(index == 1){ return "/img/1";}
	  return 5;
	}
}