I'm trying to make a type which can be either string | number or number but never just string. Here was my attempt, but as you can see, the string | number case just devolves into number. Is there any way to express this?
type StringOrNumberOrJustNumber<T extends string | number = string | number>
= T extends number ? T : never;
// This becomes "number" but I'd like it to stay "string | number"
type StringOrNumber = StringOrNumberOrJustNumber<string | number>;
// This becomes "never" as desired, but an error would be even better
type JustString = StringOrNumberOrJustNumber<string>;
// This becomes "number" as desired
type JustNumber = StringOrNumberOrJustNumber<number>;