Typescript 创建函数结果的并集类型

Typescript 创建函数结果的并集类型,typescript,redux,Typescript,Redux,我有一些函数,我需要函数结果类型的并集类型 例子 输入函数类型: 输出类型: type ResultType = {type: "INCREASE"} | {type: "ADD", by: number} 现在的 我当前的代码非常冗长,但看起来如下所示: function returntypeof<RT>(expression: (...param: any[]) => RT): RT { return {} as RT; }

我有一些函数,我需要函数结果类型的并集类型

例子 输入函数类型:

输出类型:

type ResultType = {type: "INCREASE"} | {type: "ADD", by: number}

现在的 我当前的代码非常冗长,但看起来如下所示:

function returntypeof<RT>(expression: (...param: any[]) => RT): RT {
  return {} as RT;
}

const AllTypes = {
  1: returntypeof(InputType1),
  2: returntypeof(InputType2),
};

type ResultType = typeof AllTypes[keyof typeof AllTypes];
函数returntypeof(表达式:(…参数:any[])=>RT:RT{
返回{}作为RT;
}
常量所有类型={
1:返回类型(输入类型1),
2:返回类型(输入类型2),
};
type ResultType=typeof AllTypes[keyof typeof AllTypes];

在variadic可用之前(并了解如何使用),现在您可以尝试以下方法:

function foo<T1, T2>(x1: T1, x2?: T2): T1 & T2 {
  return {} as T1 & T2; 
}

let y = foo({ a: 1 })
let x = foo({ a: 1 }, { b: 'b' })
函数foo(x1:T1,x2?:T2):T1和T2{ 返回{}作为T1和T2; } 设y=foo({a:1}) 设x=foo({a:1},{b:'b'})
目前,您必须依靠overloads@unional那会是什么样子?:)
function foo<T1, T2>(x1: T1, x2?: T2): T1 & T2 {
  return {} as T1 & T2; 
}

let y = foo({ a: 1 })
let x = foo({ a: 1 }, { b: 'b' })