如何在TypeScript中合并两个函数定义?

如何在TypeScript中合并两个函数定义?,typescript,definition,Typescript,Definition,我有以下create函数,它有两个定义: //定义1 导出异步函数创建( 实体:ObjectType, 资料来源:DeepPartial ):承诺; //定义2 导出异步函数创建( 实体:ObjectType, 数据:部分, pickValues:实体的键 ):承诺; //实施 导出异步函数创建( 实体:ObjectType, 数据:部分, pickValues?:实体的键 ):承诺{ const{manager}=await connectDatabase(); const instance=

我有以下
create
函数,它有两个定义:

//定义1
导出异步函数创建(
实体:ObjectType,
资料来源:DeepPartial
):承诺;
//定义2
导出异步函数创建(
实体:ObjectType,
数据:部分,
pickValues:实体的键
):承诺;
//实施
导出异步函数创建(
实体:ObjectType,
数据:部分,
pickValues?:实体的键
):承诺{
const{manager}=await connectDatabase();
const instance=manager.create(实体、数据);
const createdEntity=wait manager.save(实例);
返回pickValues的类型===“未定义”
?创造身份
:pick(createdEntity,pickValues);
}
有没有办法在函数实现的类型中合并这两个定义?可能使用条件返回类型。。。大概是这样的:

A extends B ? c : d;

确实可以为此使用条件返回类型。我们需要做的是为
pickValues
参数引入一个泛型类型,以便将其用于返回类型:

导出异步函数创建(
实体:ObjectType,
数据:部分,
pickValues?:pickValues
):承诺{
const{manager}=await connectDatabase();
const instance=manager.create(实体、数据);
const createdEntity=wait manager.save(实例);
return(typeof pickValues==='undefined'
?创造身份
:选择(createdEntity,pickValues作为实体的键)作为任意项;
}
不幸的是,由于TypeScript中的设计限制,它并不真正理解返回类型应该根据
pickValues
的值而有所不同。因此,我们必须将返回值强制转换为
any
,以使其正常工作

由于必要的强制转换和增加的复杂性,我建议坚持使用重载以获得更好的可读性



注意:TypeScript实际上有一个实用程序类型
Pick
,它应该允许您更加具体。您可以在返回类型中使用
Pick
而不是
Partial

是的,我尝试使用这种泛型类型,但我得到了以下错误:
类型“Partial”不可分配给类型“PickValues extends undefined”?实体:Partial'.ts(2322)
。抱歉,我在代码示例中犯了一个错误。参数
pickValues
的类型应为
pickValues
。答案已更新。嗯,虽然我认为这不会修复错误。。。我会试着找出问题所在。即使它适用于所有这些演员。。。我可能更喜欢这两个重载。主要是因为它们更容易阅读和理解。不用担心。我自己也有点不高兴,结果不太好。我已经用演员阵容和为什么需要他们的信息更新了答案。