Typescript 从对象获取值的函数的强类型
我有一个从对象中按键获取值的函数,它允许我在使用它时查看记录中可能的键的建议。函数从其参数推断类型 function get<T extends Record<string, any>, K1 extends keyof T>( record: T | undefined, key1: K1 ): T[K1] | undefined const foo = { bar: 1, baz: 2 } get(foo, 'bar') // 1, get<{ a: number, b: number }> 编辑: 我只想说清楚,如果不先指定记录,我就无法获得建议Typescript 从对象获取值的函数的强类型,typescript,typescript-typings,Typescript,Typescript Typings,我有一个从对象中按键获取值的函数,它允许我在使用它时查看记录中可能的键的建议。函数从其参数推断类型 function get<T extends Record<string, any>, K1 extends keyof T>( record: T | undefined, key1: K1 ): T[K1] | undefined const foo = { bar: 1, baz: 2 } get(foo, 'bar') // 1, get<{
prop('...') // no suggestions here
prop('...')(foo) // now I want suggestions
我高度怀疑这是不可能的,因为依赖项的顺序颠倒了。如果首先提供对象,则这不会成为问题 现在,您必须通过泛型手动指定对象的类型,例如:
const get = <T extends Record<K1, any>, K1 extends keyof T>(key1: K1) =>
(record: T) => record[key1];
const foo = { bar: 1, baz: 2 }
get<typeof foo, keyof typeof foo>('bar')(foo)
const get=(key1:K1)=>
(记录:T)=>记录[key1];
const foo={bar:1,baz:2}
获取('bar')(foo)
这只是套路,与无点无关。如果你先指定键,你就无法真正获得建议,你可以获得prop(foo)('bar')
来给你建议是的,我想以点费的方式使用它,但把它弄糊涂了。我不确定是否理解我到底想得到建议。甚至在我在编辑中指定的方法中也不可能做到?@PetrD.Svoboda:是的,我认为这是不可能的。
prop('...') // no suggestions here
prop('...')(foo) // now I want suggestions
const get = <T extends Record<K1, any>, K1 extends keyof T>(key1: K1) =>
(record: T) => record[key1];
const foo = { bar: 1, baz: 2 }
get<typeof foo, keyof typeof foo>('bar')(foo)