How can Typescript be utilized to deduce the return type from the valueType parameter instead of using overloads?
type ValueType = 'integer' | 'string' | 'number' | 'date' | 'dateTime' | 'boolean' | '';
function toValueType<S>(v: S, valueType: 'integer'): number;
function toValueType<S>(v: S, valueType: 'number'): number;
function toValueType<S>(v: S, valueType: 'date'): Date | undefined;
function toValueType<S>(v: S, valueType: 'dateTime'): Date | undefined;
function toValueType<S>(v: S, valueType: 'string'): string;
function toValueType<S>(v: S, valueType: ''): S;
function toValueType<S>(v: S, valueType: ValueType): any {
switch (valueType) {
case 'integer':
return To.int(v); // returns number
case 'number':
return To.number(v); // returns number
case 'date':
return To.date(v); // returns Date|undefined
case 'dateTime':
return To.dateTime(v); // returns Date|undefined
case 'string':
return To.string(v); // returns string
case 'boolean':
return To.boolean(v); // returns boolean
default:
return v; // returns source
}
}