gpt4 book ai didi

typescript - 如何正确键入泛型函数的参数?

转载 作者:行者123 更新时间:2023-12-04 17:39:24 25 4
gpt4 key购买 nike

我正在尝试将函数的参数分配给类型别名。例如。对于此功能:

function foo<T>(bar: T, baz: number) {}

我想获取其参数的签名。通常,我会这样做:

type FooParams = Parameters<typeof foo>;

但问题是这导致了 [{}, number] 的签名,这是有道理的,因为我没有指定 T 是什么。但是,我希望它能起作用:

type FooParams<T> = Parameters<typeof foo<T>>; // hopefully [T, number]

但事实并非如此,它只会导致一堆语法错误。

能否正确获取泛型函数参数列表的类型?

最佳答案

您可以使用 infer关键词:

type Args<T> = T extends (...args: infer I) => any ? I : never;

type R = Args<(args: number, arg: string) => number >;
// R = [number, string]

意思是输入I被视为通用,但您不必像这样声明它:let fn = <T>(arg:T): T {...

playground , docs


您可以实现泛型类型,但您必须声明函数类型:

type Foo<T> = (bar: T, baz: number) => void;
type R2<Placeholder> = Args<Foo<Placeholder>>; // [Placeholder, number]
type R3 = R2<boolean> // [boolean, number]

关于typescript - 如何正确键入泛型函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55181803/

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