我正在写一个简单的 Typescript 模块,它是一个函数,你给它一个对象,它调用所有函数并在相同的属性上设置值。
如果对象中的任何属性不是函数,它不会对它做任何事情,只是忽略它。
以下是完整的功能源代码,它可以工作,仅此而已,唯一剩下的就是将它从 vanilla JavaScript 转换为 Typescript。
import _ from 'lodash'
export default function flexifyParams(params) {
const composedObject = {}
for (const [key, value] of Object.entries(params)) {
composedObject[key] = _.isFunction(value) ? value() : value
}
return composedObject
}
这里有一个很好的例子来说明这个功能是如何工作的:
const test = {
x: () => 'hi',
y: () => 123,
z: () => ["a", "b", "c"],
a: 'my string',
}
const P = flexifyParams(test)
// P is equal to:
// {
// x: 'hi',
// y: 123,
// z: ["a", "b", "c"],
// a: 'my string',
// }
现在,这是我到目前为止所做的尝试,我尝试使用打字稿重写这个函数,代码如下:
import _ from 'lodash'
export default function flexifyParams<PARAMS extends object>(params: PARAMS): PARAMS {
const composedObject: { [index: string]: string | Symbol | number } = {}
for (const [key, value] of Object.entries(params)) {
composedObject[key] = _.isFunction(value) ? value() : value
}
return composedObject as PARAMS
}
它仍然有效,但是函数返回值类型并不完全正确。
返回值将保存参数中给定的相同对象键是正确的,但它们的值不相同,它们的值是给定方法的返回值。
如何使用 TypeScript 正确键入此函数的返回值。
谢谢你🌹