【发布时间】:2020-10-15 17:06:33
【问题描述】:
我有一个从对象中按键获取值的功能,它允许我在使用它时查看记录中可能键的建议。该函数从它的参数推断类型。
function get, K1 extends keyof T>( 记录:T |不明确的, 键1:K1 ): T[K1] |不明确的 const foo = { bar: 1, baz: 2 } get(foo, 'bar') // 1, get
是否可以将其转换为无点样式,保留强类型并且不丢失建议?与此类似。
function get<T extends Record<string, any>, K1 extends keyof T>(key1: K1):
(record: T | undefined) => T[K1] | undefined
const foo = { bar: 1, baz: 2 }
get('bar')(foo) // 1, get<{ a: number, b: number }>
显然这不起作用。我尝试了 pointfree 函数的多种变体,但我无法让它工作。
我查看了函数prop 的ramda 实现,它可以无点工作,但它不提供建议,因为它允许任何字符串作为键。
type prop = <P extends string>(key: P) => <T>(obj: Record<P, T>) => T
const foo = { bar: 1, baz: 2 }
prop('bar')(foo) // 1, prop: <"bar">(key: "bar") => <T>(obj: Record<"bar", T>) => T
编辑:
为了清楚起见,我知道如果不先指定记录,我将无法获得建议。
prop('...') // no suggestions here
prop('...')(foo) // now I want suggestions
【问题讨论】:
-
那只是柯里化,与pointfree无关。
-
如果你先指定key你不能真正得到建议,你可以得到
prop(foo)('bar')给你建议 -
是的,我想以积分方式使用它,但弄糊涂了。
标签: typescript typescript-typings