【发布时间】:2022-10-23 15:47:28
【问题描述】:
假设我有一个函数,它将 lambda 函数作为参数来访问/返回对象的属性,有没有办法对泛型进行解构(可能是递归的?)所以我知道该属性是否存在?我不希望将 T 扩展到任何现有类型,因为我希望使此函数输入类型尽可能通用
这是一个澄清的例子:
const binarySearch = <T, U>(array:T[], value:(T|U), getProperty?:(item:T, index?:number) => U):number => {}
其中“U”可以是“T”的任何一个属性
如果它是一个对象数组,则可以通过使用 lambda 访问属性来调用它
const index = binarySearch(objectArray, objectProperty, (obj) => obj.property)
或者如果不是,则使用数组值
const index = binarySearch(primitiveArray, primitive)
我希望该函数能够像普通的二进制搜索方法一样具有更多的通用性,因为不必创建几个类似的函数来访问不同的属性类型(特别是如果这些属性是嵌套的)
【问题讨论】:
-
请提供一个使用示例以及您的期望。为什么项目是
T|U? -
@captain-yossarianfromUkraine 对不起,我匆匆完成了示例的命名变量和全面性,但我希望我的编辑能澄清一些事情。另外,T|U 是因为我希望能够根据数组搜索值或对象属性
-
请提供一个带有实际值的示例,我需要它进行测试
-
请考虑提供一个独立的minimal reproducible example,它会在将您的问题按原样粘贴到独立的 IDE 时演示您的问题。现在我的 IDE 不知道
objectArray、objectProperty、primitiveArray或primitive是什么,所以我必须尝试修复这些问题才能开始解决问题。如果您可以提前解决这些问题,并提供其他人可以测试的已知用例,那么您更有可能得到一个好的答案。如果您在问题中使用edit 并希望我再看一下,请发表评论并提及@jcalz,以便我收到通知。祝你好运!
标签: typescript typescript-generics