Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript—返回作为参数传递的每个函数的返回值的并集的类型函数_Typescript - Fatal编程技术网

Typescript—返回作为参数传递的每个函数的返回值的并集的类型函数

Typescript—返回作为参数传递的每个函数的返回值的并集的类型函数,typescript,Typescript,请问是否有人能帮助我在typescript中为下面的javascript函数添加类型?在最好的情况下,我想避免使用“any”,但即使在谷歌搜索了一整天之后,我也无法弄明白这一点 javascript中的函数: function executeAll(...funcs) { const result = funcs.reduce((currentResult, nextFunc) => { return { ...currentResult, ...nex

请问是否有人能帮助我在typescript中为下面的javascript函数添加类型?在最好的情况下,我想避免使用“any”,但即使在谷歌搜索了一整天之后,我也无法弄明白这一点

javascript中的函数:

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=结果类型;