首页 > 解决方案 > 如何纠正被推断为未知的咖喱函数的函数参数的参数的类型推断?

问题描述

当使用单独接受函数和列表unknown的柯里化函数时,如果柯里化的顺序是接受一个函数作为第一个参数,那么如何从列表中正确推断出函数参数的参数(避免推断为)然后接受一个列表作为第二个参数范围?- 这可能吗?如果没有,这里提供一个好的函数 API 以改善开发人员体验的最佳方法是什么?

例如,在下面的代码片段中,一个selector函数作为第一个参数传递给第一个柯里化函数,它的参数i应该提供为第二个柯里化函数的T第二个参数提供类型推断的类型。numbers

但是,selecti参数被推断为类型unknown- 为什么会这样?

如何更改示例以使i's &list的推断类型两者兼而有之Item

const select = <T>(selector: (i: T) => T) => (numbers: T[]) => numbers.map(selector);
interface Item { name: string; }
const items: Item[] = [{ name: 'name1' }, { name: 'name2' }];

// ERROR: Property 'name' does not exist on type 'unknown' (`i` is type `unknown`, `items` is type `Item[]`).
select(i => i.name)(items); 

标签: typescriptfunctional-programmingtype-inferencecurrying

解决方案


推荐阅读