[英]In TypeScript, can I infer a mapped type from function overloads?
鑒於這些重載:
function f(p: 'a'): 'x';
function f(p: 'b'): 'y';
function f(p: 'c'): 'z';
我能以某種方式從f
推斷出這種類型嗎?
type M = {
'a': 'x';
'b': 'y';
'c': 'z';
}
找到了一種方法,雖然有點麻煩,並且只能處理有限數量的重載。
interface Test {
f(p: 'a'): 'x';
f(p: 'b'): 'y';
f(p: 'c'): 'z';
};
type MapArgumentToReturn<F> =
F extends { (a: infer A): infer AR; (b: infer B): infer BR; (c: infer C): infer CR } ? [A, AR]|[B, BR]|[C, CR] :
F extends { (a: infer A): infer AR; (b: infer B): infer BR } ? [A, AR]|[B, BR] :
F extends { (a: infer A): infer AR } ? [A, AR] :
never;
type TupleToObject<T extends [string, any]> = { [key in T[0]]: Extract<T, [key, any]>[1] };
type Result = TupleToObject<MapArgumentToReturn<Test['f']>>;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.