type ConditionalProcess<T> = T extends string
? Uppercase<T>
: T extends number
? T extends 0 ? 0 : T extends 1 ? 2 : T extends 2 ? 4 : T extends 3 ? 6 : T extends 4 ? 8 : T extends 5 ? 10 : T extends 6 ? 12 : T extends 7 ? 14 : T extends 8 ? 16 : T extends 9 ? 18 : never
: T extends boolean
? boolean extends T ? boolean : T extends true ? false : true
: never;
function applyConditionalProcess<T>(value: T): ConditionalProcess<T> {
if (typeof value ==='string') {
return value.toUpperCase() as ConditionalProcess<T>;
} else if (typeof value === 'number') {
return (value * 2) as ConditionalProcess<T>;
} else if (typeof value === 'boolean') {
return (!value) as ConditionalProcess<T>;
}
throw new Error('Unsupported type');
}