typescript:返回类型不正确

typescript:返回类型不正确,typescript,rxjs,Typescript,Rxjs,我创建了一个函数,它接受特定类型的值并过滤它们。这是: 从'lodash'导入{isMatch}; 导出函数谓词(compareWith:Partial):运算符函数{ 返回src$=>src$.pipe(映射(值=>{ if(数组.isArray(值)){ 返回值.filter(element=>isMatch(element如有,compareWith)); } 抛出新错误('值不是数组'); })); } 现在,当我在Customer类型模型的数组上使用它时,比如谓词({Customer

我创建了一个函数,它接受特定类型的值并过滤它们。这是:

从'lodash'导入{isMatch};
导出函数谓词(compareWith:Partial):运算符函数{
返回src$=>src$.pipe(映射(值=>{
if(数组.isArray(值)){
返回值.filter(element=>isMatch(element如有,compareWith));
}
抛出新错误('值不是数组');
}));
}
现在,当我在
Customer
类型模型的数组上使用它时,比如
谓词({CustomerId:100})
CustomerId
Customer
模型的属性),我有以下错误:

类型“Observable”不可分配给类型“Observable”。

但是,如果我显式地将其称为
谓词({CustomerId:100})
,它将正常工作

如何正确配置类型,使客户成为返回的类型

下面是一个失败的函数:

getCustomers(customerId){
返回方法$.pipe(谓词({CustomerId:CustomerId}));
}
更新:

这里有一个小的解决办法,很有效。但我不喜欢它:

导出函数谓词(与:Partial

比较):运算符函数{ 返回src$=>src$.pipe(映射(值=>{ if(数组.isArray(值)){ 返回值.filter(element=>isMatch(element如有,compareWith)); } 抛出新错误('值不是数组'); })); }


意思是说,
{CustomerId:CustomerId}
不是一个完整的客户-您需要对其进行类型转换以强制其符合或创建一个完整的客户类型。@fredrik我理解这一点。问题是如何避免在那里显式键入。这个操作符将被大量使用,我不想在任何你们无法避免的地方显式地设置模型,据我所知。如果你想把它打印出来,你必须一直承受后果。我想,你的“解决办法”是要走的路。原始签名的问题是,IIRC,推断从参数开始,因此
T
被推断为
{CustomerId:Number;}
。您的“变通方法”——我不会这样称呼它——在参数中不包括
t
,因此它从返回类型推断
t
。也许这会让你更喜欢它?我觉得很好。