在我下面有一个名为C:\Program Files\MySQL\MySQL Shell 8.0\bin\;
C:\Users\nick\AppData\Roaming\npm\node_modules\ionic\bin;
C:\Users\nick\AppData\Roaming\npm\node_modules\cordova\bin;
的函数,其目的是采用一个值为j
的{{1}}并依次解析每个对象object
(减少),并将函数的返回值分配给其相应的键。
函数本身很简单,即functions
,它也可以解析承诺值,允许value-functions为property
,并将结果分布在累积的对象上。
每个函数都可以访问传入的参数以及每个以前的函数的键返回值。
我正在尝试键入此函数_.reduce
,以便在async
返回的函数上进行明智的键入。在下面的示例中,j
函数采用一个j
属性,并且该对象中没有customAnimal
键,因此很明显,该值必须是animal
返回的函数。
animal
j
键入这样的函数似乎很复杂,但事实并非如此。是否有任何泛型可以将每个函数中的所有import * as _ from 'lodash';
export const isPromise = (obj) => !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'
type ValueOf<T> = T[keyof T];
type Jin = { [key: string]: Function }
const j = (objFns: Jin): Function => {
/** Parameters<> object where combind all parameters from all object values */
/** ReturnType<> all object keys with types as return types from functions, merged with original args */
return (input) => {
return _.reduce(_.toPairs(objFns), (acq, pair) => {
const [key, fn] = pair
const handleResult = (acq, result) => {
const addition = { [key]: result}
return { ...acq, ...addition }
}
const handleResultPossiblePromise = (acq, result) => {
const resultIsPromise = isPromise(result)
if (resultIsPromise) return result.then(result => handleResult(acq, result))
return handleResult(acq, result)
}
const handleAcqPossiblePromise = (acq) => {
const acqIsPromise = isPromise(acq)
if (acqIsPromise) return acq.then(acq => handleResultPossiblePromise(acq, fn(acq)))
return handleResultPossiblePromise(acq, fn(acq))
}
return handleAcqPossiblePromise(acq)
}, input)
}
}
const makePoem = j({
color: () => 'blue',
sky: ({ color }) => `the color of the sky is ${color}`,
ocean: ({ color }) => `the color of the ocean is ${color}`,
customAnimal: ({ animal, color }) => `the color of the ${animal} is ${color}`,
poem: ({ sky, ocean, customAnimal }) => [sky, ocean, customAnimal].join('\n'),
})
console.log(makePoem({ animal: 'cat' }))
组合在一起,甚至可以将Diff与提供的参数一起使用?声明Merge<>
时是否可以定义Parameters<>
需要什么?类似于j
的样式组件如何?
如何键入j
,以便正确键入函数withProps<IProps, HTMLDivElement>(styled.div)
?