function createTransformer<T>(initialValue: T): (value: T) => number | string {
if (typeof initialValue ==='string') {
return (value: string) => value.length;
} else if (typeof initialValue === 'number') {
return (value: number) => value.toString();
}
return (value: T) => 0 as number;
}
// 示例使用
const stringTransformer = createTransformer('initial string');
const stringLength = stringTransformer('test string');
const numberTransformer = createTransformer(10);
const numberString = numberTransformer(20);
泛型绑定时机对类型推导的影响
- 泛型绑定时机:在函数工厂
createTransformer
定义时绑定泛型T
,T
的类型由调用createTransformer
时传入的initialValue
的类型决定。
- 类型推导:通过这种方式,返回函数的参数类型会被推导为与
initialValue
相同的类型。例如,当传入一个字符串作为initialValue
时,T
被推导为字符串类型,返回函数的参数类型也为字符串类型,且返回值类型也会根据initialValue
的类型在函数内部的逻辑确定。这保证了类型的一致性和安全性,使得在编译阶段就能捕获类型不匹配的错误。