繁体   English   中英

在 TypeScript 中,我可以从函数重载中推断出映射类型吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM