[ts] 利用infer实现根据传入的动态类型判断输出类型

type TestFunction<T> = () => T;
type TestResult<T> = {
    [K in keyof T]: T[K] extends TestFunction<infer R> ? R : T[K];
};


function test<T extends Record<string, string | TestFunction<R>>, R>(p: T): TestResult<T> {
    return {} as TestResult<T>;
}

const t = test({a: "111", b:() => 11})
t.a; // string
t.b; // number
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容