Безусловно, с выводом это легко выполнимо. TypeScript позволяет вам «возвращать» другой тип на основе общей проверки типа ввода c. Вы должны просто использовать InferInputType<T>
тип, подобный этому:
type InferInputType<T> =
T extends number ? ABC :
T extends string ? XYZ :
never;
, тогда вы можете переписать свой Gen как:
class Gen<T> {
public doStuff(input: InferInputType<T>) {}
}
Тогда вы можете использовать свой класс следующим образом:
const genNumber = new Gen<number>();
genNumber.doStuff({ value: 10 });
genNumber.doStuff({ value: 'abc' }); // Error
Вы можете увидеть рабочий пример на детской площадке: Playground Link