Typescript 联合函数的合并参数的类型

Typescript 联合函数的合并参数的类型,typescript,types,Typescript,Types,假设我们有一个给定的函数联合类型: type UnionFunc = ((a: string, b: number) => string) | ((a: string, b: any, c: boolean) => number) 有没有办法获得这个联合体的参数来满足联合体中的所有函数?主要的任务是获取这些参数,而不管每个函数的返回类型是什么 MergedParameters<UnionFunc>; // [a: string, b: number, c: boolea

假设我们有一个给定的函数联合类型:

type UnionFunc = ((a: string, b: number) => string) | ((a: string, b: any, c: boolean) => number)
有没有办法获得这个联合体的参数来满足联合体中的所有函数?主要的任务是获取这些参数,而不管每个函数的返回类型是什么

MergedParameters<UnionFunc>; // [a: string, b: number, c: boolean]

我不知道我是否正确理解了你想要做的事情。 也许下面这种方式可以帮助你有一些想法

type myFirstType = ((a: string, b: number) => string);
type mySecondType = ((a: string, b: any, c: boolean) => number);
type UnionFunc = myFirstType | mySecondType;


const myFunc: UnionFunc = (a: string, b: any, c:boolean): number => {
  return 1;
}

const myFunc2: UnionFunc = (a: string, b: number): string =>{
  return "1;"
}

请考虑修改这个问题中的代码,以便构成一个当它落入独立IDE时,清楚地显示出你所面临的问题。(例如,即使我定义了
MergedParameters
,参数中也存在语法错误。)这将允许希望帮助您的人立即着手解决问题,而无需首先重新创建它。它将使您得到的任何答案都可以根据定义良好的用例进行测试。
any
是一种特别容易传染的伪类型,它会传播到它所涉及的所有东西;我不明白你怎么期望
b:number
b:any
组合成
b:number
。一般来说,将
any
number
组合在一起会得到
any
。如果您不想这样做,我建议使用
b:unknown
而不是
b:any
@jcalz。我想知道它在函数数组声明中是如何工作的。TypeScript以一种相当聪明的方式合并了参数。但只有当回报类型相同时:哦,你应该在问题本身中明确提到这一点;如果你试图以不同的方式利用现有的功能,它建议了一种不同于从头开始重新创建的方法;这是我目前的努力,它已经手动调整到特定的例子,如果你觉得有趣,它开始崩溃。我很乐意写一个答案,但结论基本上是“你真的做不到,试试别的”。不完全是这样。我需要的是一个helper类型来从这两个函数类型中获取以下元组:
[string,number,boolean]
const funcs = [
  (a: string, b: any): any => {},
  (a: string, b: number, c?: boolean): any => {},
]

type FuncType = typeof funcs[number]; // (a: string, b: number, c?: boolean | undefined) => any
type myFirstType = ((a: string, b: number) => string);
type mySecondType = ((a: string, b: any, c: boolean) => number);
type UnionFunc = myFirstType | mySecondType;


const myFunc: UnionFunc = (a: string, b: any, c:boolean): number => {
  return 1;
}

const myFunc2: UnionFunc = (a: string, b: number): string =>{
  return "1;"
}