如何在打字稿中键入对象中方法的返回值

问题描述 投票:0回答:0

我正在写一个简单的 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 正确键入此函数的返回值。

谢谢你🌹

javascript typescript
© www.soinside.com 2019 - 2024. All rights reserved.