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;"
}