我正在尝试为一些过滤器类型的操作创建一个迷你DSL,并为其编写一些辅助方法。
说我有功能
const equals = (left, right) => {}
此函数的类型必须使left
值是对象上的字段,而right
是该对象类型的值。
如果我做const equals = <T> (left: keyof T, right: T[keyof T]) => {}
,我会接近,但是right
的范围缩小到T
上可用的类型,而不仅仅是left
的类型。
期望的行为可以通过以下方式实现:
const equals = <T, F extends keyof T>(left: F, right: T[F])
但这需要两个通用参数,这些参数打破了我对该函数周围的代码的类型推断链。理想情况下,我想基于第一个参数键入第二个参数。这可能吗?
谢谢