gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:35:03 27 4
gpt4 key购买 nike

鉴于这些重载:

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']>>;

关于typescript - 在 TypeScript 中,我可以从函数重载中推断出映射类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60473389/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com