Typescript—返回作为参数传递的每个函数的返回值的并集的类型函数
请问是否有人能帮助我在typescript中为下面的javascript函数添加类型?在最好的情况下,我想避免使用“any”,但即使在谷歌搜索了一整天之后,我也无法弄明白这一点 javascript中的函数:Typescript—返回作为参数传递的每个函数的返回值的并集的类型函数,typescript,Typescript,请问是否有人能帮助我在typescript中为下面的javascript函数添加类型?在最好的情况下,我想避免使用“any”,但即使在谷歌搜索了一整天之后,我也无法弄明白这一点 javascript中的函数: function executeAll(...funcs) { const result = funcs.reduce((currentResult, nextFunc) => { return { ...currentResult, ...nex
function executeAll(...funcs) {
const result = funcs.reduce((currentResult, nextFunc) => {
return {
...currentResult,
...nextFunc(),
};
}, {});
return result;
}
用法示例:
const result = executeAll(
() => { return { firstResult: "Abc" } },
() => { return { secondResult: 123 } });
console.log(result);
示例中的函数创建如下对象:
{
第一个结果:“Abc”,
第二个结果:123
}
基本上,“executeAll”的结果应该是传入的每个函数的返回值的并集。这样的事情可能发生吗?或者我正在努力完成一些无法完成的事情?
任何帮助都将不胜感激
谢谢
Miro您可以使用post中概述的
Spread
类型以及递归类型执行此操作:
//=========
//扩散型
// =========
//T中包含未定义类型的属性的名称
键入OptionalPropertyNames=
{[K in keyof T]:未定义的扩展T[K]?K:never}[keyof T];
//L和R中的公共属性,其中R[K]中的未定义替换为L[K]中的类型
类型属性=
{[P in K]:L[P]| Exclude};
类型Id={[K in keyof T]:T[K]}//参见底部的注释*
//{…L,…R}的类型
类型排列=Id<
//L中不存在于R中的属性
&挑
//R中包含排除未定义类型的属性
&挑
//R中的属性,其类型包括L中不存在的未定义属性
&挑
//R中的属性,其类型包括L中存在的未定义属性
&展布特性
>;
// =========
//实际类型
// =========
类型Func=(…参数:any)=>any;
类型FuncMerge=
T扩展[推断H,…推断R]
? H扩展Func?R扩展Func[]
? 传播
:从不
: {};
函数executeAll(…funcs:T):FuncMerge{
const result=funcs.reduce((currentResult,nextFunc)=>{
返回{
…当前结果,
…nextFunc(),
};
}, {});
以FuncMerge返回结果;
}
const result=executeAll(
()=>{return{firstResult:“Abc”},
()=>{return{secondResult:123}});
类型Foo=结果类型;