我想用打字稿进行柯里化并且有:
const findValueInDb = (value: number, dbSpec: string) => `found it, it's here: ${dbSpec}!`
const createFindValue = (dbSpec: string) =>
(...params: Omit<Parameters<typeof findValueInDb>, "1">) => findValueInDb(...params, dbSpec)
const theResult = createFindValue("theDb")(10)
Run Code Online (Sandbox Code Playgroud)
这是行不通的,如果在源函数中添加参数的话,也不会很灵活。如何定义柯里化合约?删除最后一个参数但保留其他参数的一个?
Min*_*uel 10
在 TypeScript 4 中,您可以使用推断的元组类型来获取除最后一个(或第一个等)之外的所有元素:
type Head<T extends any[]> = T extends [ ...infer Head, any ] ? Head : any[];
Run Code Online (Sandbox Code Playgroud)
const findValueInDb = (value: number, dbSpec: string) => `found it, it's here: ${dbSpec}!`
const createFindValue = (dbSpec: string) =>
(...params: Head<Parameters<typeof findValueInDb>>) => findValueInDb(...params, dbSpec)
const findValue = createFindValue("theDb")(10)
Run Code Online (Sandbox Code Playgroud)