gpt4 book ai didi

typescript - 如何使用一个函数的返回类型作为另一个函数的参数类型?

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

给定形状

const shape = {
foo: () => 'hi',
bar: (arg) => typeof arg === 'string'
// arg should be string because foo returns a string
}

如何将 foo 的返回类型链接到 arg 的输入类型?

我尝试了类似于的条件类型的几个版本

type Cond<T> = T extends { foo: () => infer A }
? { foo: () => A; bar: (arg: A) => bool }
: never

但是我失败了。有什么想法吗?

最佳答案

如果我们暂时忘记自引用对象,解决此问题的最简单方法是使用 TS 提供的 ReturnType 实用程序类型:

const foo = () => "hi";
const bar = (arg: ReturnType<typeof foo>) => typeof arg === "string";
const shape = { foo, bar };

我们可以通过定义形状接口(interface)来缩小范围,以便通过对象本身链接这两个方法:

interface Shape {
foo: () => string;
bar: (arg: ReturnType<Shape["foo"]>) => boolean;
}

const shape: Shape = {
foo: () => "hi",
bar: (arg) => typeof arg === "string"
}

我们可以编写实用程序/工厂函数,它可以使用任意两个提供的方法的泛型动态执行此操作:

const asMyShape = <
F extends () => void,
B extends (arg: ReturnType<F>) => void
>(foo: F, bar: B) => ({ foo, bar });

const shape = asMyShape(() => "hi", (arg) => typeof arg === "string");

关于typescript - 如何使用一个函数的返回类型作为另一个函数的参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69042766/

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