[英]How to access an object value by a key and return its specific value type
[英]How to access the type of object's value by its key?
所以我有一个返回 function 的 function。我想要这个:
fn: <T extends Object>(key: keyof T) => (value: ???) => void
我要什么???
成为instanceOfT[key]
的类型。 例如,如果T={name: string; age: number}
T={name: string; age: number}
我希望fn('name')
返回(value: string) => void
并让fn('age')
返回(value: number) => void
这可能吗?
不幸的是,无法部分推断您的 function 的通用类型。请参阅 GitHub 问题:
您需要使用其中一种解决方法:
请参阅对In TypeScript 的回答是否可以从字符串的输入类型推断可区分联合的字符串文字类型?
namespace Curry {
type Consumer<K> = (value: K) => void;
function makeConsumer<P>()/*: <K extends keyof P>(key: K) => Consumer<P[K]>*/ {
function factory<K extends keyof P>(key: K): Consumer<P[K]> {
return (value: P[K]) => console.log(value);
}
return factory;
}
const barConsumer = makeConsumer<{ bar: string }>()("bar");
}
namespace Dummy {
type Consumer<K> = (value: K) => void;
function makeConsumer<P, K extends keyof P>(dummy: P, key: K): Consumer<P[K]> {
return (value: P[K]) => console.log(value);
}
type T = { bar: string };
const barConsumer = makeConsumer(null! as T, 'bar');
}
namespace AllParamsInGeneric {
type Consumer<K> = (value: K) => void;
function makeConsumer<P, K extends keyof P>(): Consumer<P[K]> {
return (value: P[K]) => console.log(value);
}
const barConsumer = makeConsumer<{ bar: string }, 'bar'>();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.