У меня небольшие проблемы с дженериками, и я надеялся на некоторые рекомендации. Здесь есть рабочий пример . Этот пример создан для упрощения примера.
Я бы подумал, что T
в типе Transformer
будет выведен без проблем, но это не так. Причина, по которой Transformer
возвращает T | K
, заключается в том, что преобразователь по умолчанию использует identity
функцию
const multiply = (a: number) => (b: number) => a * b;
const identity = <T extends any>(a: T) => a;
const toInt = (a: string) => parseInt(a, 10);
const by10 = multiply(10);
type Transformer = <T, K>(value: T) => T | K;
const renderContent = (
value: string | number,
transformer: Transformer = identity
) => {
const transformed = transformer(value);
console.log(transformed);
return transformed;
};
renderContent(50, by10); // Type 'T' is not assignable to type 'number'
renderContent("50", toInt); // Type 'T' is not assignable to type 'string'