有可能在TypeScript中传播独特的泛型类型吗?

有可能在TypeScript中传播独特的泛型类型吗?,typescript,Typescript,是否可以将函数的参数分散到泛型类型数组中 我正在尝试向接受函数并返回函数的泛型函数添加TypeScript类型。传递函数的参数与返回函数的参数相关。我希望使用者能够将类型添加到传入函数中,并将这些类型显示在返回的函数中 我已经找到了这个问题的基本解决方案,但它只适用于固定数量的参数。是否可以按以下方式传播通用参数 用法示例: type Foo=//此处为通用解决方案 const bar=foo((状态,名称:string,年龄:number)); 酒吧('John',22);//一切都好 酒吧(

是否可以将函数的参数分散到泛型类型数组中

我正在尝试向接受函数并返回函数的泛型函数添加TypeScript类型。传递函数的参数与返回函数的参数相关。我希望使用者能够将类型添加到传入函数中,并将这些类型显示在返回的函数中

我已经找到了这个问题的基本解决方案,但它只适用于固定数量的参数。是否可以按以下方式传播通用参数

用法示例:

type Foo=//此处为通用解决方案
const bar=foo((状态,名称:string,年龄:number));
酒吧('John',22);//一切都好
酒吧(‘约翰’、‘多伊’);//类型错误,“Doe”不是数字
const baz=foo((state,firstName:string,lastName:string,age:number));
巴兹(‘约翰’、‘多伊’、22岁)
这是一个React-Hook集成。有一些非常好的例子,其中提供者做了大量的工作,使TypeScript类型安全性对他们的消费者来说非常容易。 React-Redux的
TypedUseSelectorHook
就是一个很好的例子。

尝试1 一种具有扩展性的解决方案。但不幸的是,所有类型都是所有可能类型的联合体

导出类型foo=(
baz:(state:state,…args:args[])=>Partial
)=>(…args:args[])=>任何;
尝试2 具有“固定”数量参数的解决方案。这是可行的,但“自动完成”会显示所有参数。如果消费者尝试使用的类型超过添加的类型数,TypeScript将不高兴

类型foo=<
Arg0=无效,
Arg1=无效,
Arg2=无效,
Arg3=无效,
Arg4=无效,
Arg5=无效
>(
巴兹:(
州:州,,
arg0:arg0,
arg1:arg1,
arg2:arg2,
arg3:arg3,
arg4:arg4,
arg5:arg5
)=>部分
) => (
arg0:arg0,
arg1:arg1,
arg2:arg2,
arg3:arg3,
arg4:arg4,
arg5:arg5
)=>任何;
我想开始工作的是:

类型Foo=(
巴兹:(
州:州,,
…args:PassedArgs//错误:rest参数必须是数组类型。
)=>部分
)=>(args:PassedArgs)=>任何;

这将允许使用者传入具有任意数量的参数和参数类型的函数,并且返回函数的类型将正确。

您的解决方案几乎是正确的,您只需告诉TS
Args
被限制为类似数组的东西(在本例中是参数元组)

导出类型Foo=(
baz:(state:state,…args:args)=>Partial
)=>(…args:args)=>任何;

不应该
baz
也采取
状态
?根据你的尝试?
export type Foo<State> = <Args extends any[]>(
    baz: (state: State, ...args: Args) => Partial<State>
) => (...args: Args) => any;